Cursor Stand ermitteln



  • Hi ich bin neu hier und fang gleich mal mit einer Frage an:
    Also ich möchte etwas zusammenbasteln und dazu müsste ich wissen wie man den aktuellen Cursor Stand ermittelt. Und am besten auch noch was ich inkludieren muss damit das alles auch so funzt wie ich das will 😉



  • Welches System verwendest du? C++ unterstützt keinen "Cursor", sondern nur einen Ausgabestream 'cout', in den sequentiell Daten gepackt werden (und der idR mit dem Bildschirm übereinstimmt). Alles darüber hinaus liegt in der Verantwortung des Systems.



  • du braucchst die windows.h

    dann GetConsoleScreenBufferInfo() aufrufen, da bekommst du dann die werte für die aktuelle cursorposition. wenn du paramter etc. wissen willst google ist dein freund!



  • CPoint pt;
    ::GetCursorPos( &pt );
    
    //pt.x == x koordinate
    //pt.y == y koordinate
    


  • Ufftz... Ich will doch bloß eine kleines Prob basteln, dass den Curser zu einer Stelle bewegt, einen Klick macht und wieder zurückspringt... Ich finde zu GetConsoleScreenBufferInfo() nur son Kram wie Schriftfarbe und sowas aber den aktuellen Curserstand finde ich nicht...



  • hast du meinen beitrag nicht gelesen? dann würde dir

    setcursorpos
    

    auch noch helfen.

    für sowas, was du da machen willst, ist aber AutoIt definitiv die bessere Sprache...



  • Ahhh... du meinst den Mauscursor. Das solltest du auch erwähnen. 😉



  • Ganz ehrlich ich versteh garnichts... Könnte daran liegen, dass ich fast überhauptkeine Ahnung von C++ hab. Also wie jetzt? Ich hab jetzt sowas:

    #include <windows.h>
    #include <iostream>
    
    main(){
    int pt;
    CPoint pt;
    ::GetCursorPos( &pt );
    
    cout <<"Die Koordinaten sind "<< pt.x <<" und "<< pt.y << endl;
    
    .
    .
    .
    

    Aber das passt hinten und vorne nicht. Wie bekomm ich z.B. den X oder Y Grad in eine Variable? Das wär schonmal wissenswert.



  • int pt; 
    CPoint pt;
    

    wie soll denn das auch funktionieren??? jetzt ist pt einmal ein int und einmal ein CPoint...

    main()
    {
    CPoint pt;
    ::GetCursorPos( &pt );
    
    cout <<"Die Koordinaten sind "<< pt.x <<" und "<< pt.y << endl;...
    


  • Es kommt immernoch der gleiche Fehler:
    `CPoint' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)

    Also nochmal: Die aktuellen Koordinaten in eine bzw 2 Variablen (weil es ja einmal eine X und einmal eine Y Achse ist) stecken. Wie genau? Bitte für ganz doofe erklären ich versteh nix.



  • 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 😉


Anmelden zum Antworten