Cursor Stand ermitteln



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • poste mal bitte deinen ganzen quelltext... bei mir läufts so... was hast du fürn compiler?



  • GetCursorPos() liefert die Position in einem POINT (d.h. beide Werte in einer Variablen) - das kannst du anschließend selber auseinandernehmen. (CPoint gibt's nur in der MFC)

    PS: Du hast immer noch nicht verraten, welches System du eigentlich verwendest 😉



  • ohh, stimmt, sory, ich hatte nicht dran gedacht, dass er konsole benutzt 😉



  • Also mein OS ist Windows Prof SP2 und mein Compiler ist der Dev C++ von Bloodshed. Cool wär ein fertiges Script, welches die beiden Koordinaten einfach nur in 2 Variablen einspeichert, weil es ist ja bekannt, dass man an Beispielen am besten lehrnt 😉



  • Und welche Koordinaten willst du genau?

    Die Mauszeiger-Position erhältst du mit der obengenannten GetCursorPos() Funktion und mußt sie nur noch aufdröseln. (abgesehen davon, daß der Typ "POINT" heißt und nicht "CPoint", sollte der obige Code richtig sein)

    Die Position des Eingabecursors im Konsolenfenster mit GetConsoleScreenBufferInfo():

    CONSOLE_SCREEN_BUFFER_INFO info;
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hout,&info);
    COORD pos = info.dwCursorPosition;
    cout<<"die Koordinaten sind "<<pos.X<<","<<pos.Y<<endl;
    


  • Also zumindest meckert mein Compiler nicht mehr, aber er zeigt an, dass die Koordinaten 0 und 0 sind. Warum?



  • ich machs so und es funzt: zeigt dir die ganze zeit die koordinaten an:

    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	while(1)
    	{
    		POINT pt;
    		::GetCursorPos(&pt);
    
    		cout << "Position: " << pt.x << " / " << pt.y;
    
    		Sleep(100);
    
    		system("CLS");
    	}
    	getchar();
    
    	return 0;
    }
    


  • Korekt! Genau das hab ich gesucht! Daran kann man so schon Spaß haben 😃



  • Kelle schrieb:

    Korekt! Genau das hab ich gesucht! Daran kann man so schon Spaß haben 😃

    ok, macht dann 5€ 😉 wo war denn noch dein fehler? bzw warum hat er bei dir nur 0/0 angezeigt?

    btw: das was ich dir da geliefert habe ist nur quick'n'dirty schlechter programmierstil, ja 😉



  • Mir ist ziemlich egal ob das jetzt schön gmeacht ist oder nciht, Hauptsache es funktioniert 😉
    Ah und dann hab ich noch eine Frage, wozu ich auch nichts finde, ich aber keinen extra Thread aufmachen will: Wie kann ich Befehle ausführen lassen, wenn man auf eine Taste drückt? Also nicht hier mit cin und dann Enter drücken und so, sondern direkt wenn mann z.B. die y-Taste drück, dass der dann direkt etwas macht.

    Edit: Ich hab irgendwas mit kbhit gefunden aber ich hab keine Ahnung was ich damit machen soll.



  • mit kbhit() kannst du zunächst einmal feststellen, ob eine Taste gedrückt wurde - anschließend kannst du per getch() die gedrückte Taste auslesen und darauf reagieren.



  • Also wenn ich das richtig verstanden habe, dann kann ich jetzt mit kbhit() herausfinden ob überhaupt eine Taste gedrückt wurde oder nicht. Und wie genau dann herausfinden welche? Also ums auf den Punkt zubringen: Ich möchte, dass wenn ich die Taste Y drücke, er auf einen bestimmten Punkt springt, einen Klick macht und wieder zurückkommt. Das mit dem, wohinspringen, klicken und zurückkommen habe ich hinbekommen, jetzt will ich bloß noch, dass er es nur dann macht, wenn man Y drückt. Bitte wieder für doofe erklären 😉



  • warum hatte denn dein code nun immer 0/0 angezeigt? ich glaub ich red mit ner wand 😉



  • Machine schrieb:

    ich glaub ich red mit ner wand 😉

    Da bist du nicht der einzige 😉

    @Kelle: Wie wär's, wenn du unsere Antworten mal KOMPLETT liest 😉



  • Oh sorry 😃 keine Ahnung ich hab den Code auch schon gelöscht sonst könnt ich ihn dir geben aber ich emin was soll ich damit? 😃

    Edit: Ich hab doch keine Ahnung von der Materie 😃

    Soweit bin ich schon:

    if (kbhit()){
           getch()
    

    Und jetzt?



  • also ich habe hier die komplette lösung, die du willst 😉 aber bevor du nicht deinen ganzen code postest, denke ich, du willst, dass wir deine aufgabe lösen 😉

    achtung test: [spoiler=test]blablabla[/spoiler]



  • Ok... hier bitteschön 😉

    #include <windows.h>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        //deklare
        POINT pt;
    
        //getposition
        ::GetCursorPos(&pt);
        //cout << "Position: " << pt.x << " / " << pt.y;
    
        //klickpos1
        if (kbhit()){
           getch()
        SetCursorPos(1020, 975);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
    
        //klickpos2
        SetCursorPos(1090, 975);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);    
    
        //klickpos3
        SetCursorPos(1160, 975);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);    
    
        //klickpos4
        SetCursorPos(1230, 975);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);    
    
        //go back
        SetCursorPos(pt.x, pt.y);
    
    system("CLS");
    getchar();
    return 0;
    }
    


  • was soll das werden? bestimmt was illegales für nen spiel oder so, ne?
    n bot oder so 🙄

    da man bei deinem code fast augenkrebst bekommt 😉 hier:

    #include <windows.h>
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	while(1)
    	{
    		POINT pt;
    		::GetCursorPos(&pt);
    
    		cout << "Position: " << pt.x << " / " << pt.y;
    
    		Sleep(10);
    
    		system("CLS");
    
    		if (kbhit())
            {
                char cInp = getchar();
                if( cInp == 'Y' || cInp == 'y' )
                {
                    //click position 1
                    SetCursorPos(1020, 975);
                    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    
                    //click position 2
                    SetCursorPos(1090, 975);
                    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    
                    //click position 3
                    SetCursorPos(1160, 975);
                    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    
                    //click position 4
                    SetCursorPos(1230, 975);
                    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    
                    //go back
                    SetCursorPos(pt.x, pt.y);
    
                    //break, if program has to shut down
                    //break;
                }
            }
    	}
    	return 0;
    }
    


  • Hrhr langsam nervt mich das... mein Code sieht jetzt so aus:

    #include <windows.h>
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        while(1)
        {
            POINT pt;
            ::GetCursorPos(&pt);
    
            //cout << "Position: " << pt.x << " / " << pt.y;
    
            system("CLS");
    
            if (kbhit())
            {
                char cInp = getchar();
    
                     //click position 1
                     if( cInp == 'Y' || cInp == 'y' )
                     {
                     SetCursorPos(1020, 975);
                     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                     }
    
                     //click position 2
                     if( cInp == 'X' || cInp == 'x' )
                     SetCursorPos(1090, 975);
                     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                     }
    
                     //click position 3
                     if( cInp == 'C' || cInp == 'c' )
                     SetCursorPos(1160, 975);
                     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                     }
    
                     //click position 4
                     if( cInp == 'V' || cInp == 'v' )
                     SetCursorPos(1230, 975);
                     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                     }
    
                    //go back
                    SetCursorPos(pt.x, pt.y);
    
                    //break, if program has to shut down
                    //break;
                }
            }
        }
        return 0;
    }
    

    Und der Fehler liegt in der Zeile:
    if( cInp == 'C' || cInp == 'c' )

    Wie kann das denn sein wenn das mit Y und X geht???

    Edit: Hehe ja es ist ein Hotkeytool für Warcraft 3 - DotA


Anmelden zum Antworten