Tastendruck simulieren - misslingt



  • Hallo.
    Ich versuche hier ein tastendruck zu simulieren:

    if(a == 30) {   GetAsyncKeyState(VK_R) & 0x8000;   }
    

    das haut aber nicht hin:

    19 C:\Dev-Cpp\main.cpp `VK_R' undeclared (first use this function)

    Warum?

    Benutze den dev-c++, denn ich auch nicht ersetzen werde 🤡 *treu-bleib*



  • Tastendrücke kannst du mit keybd_event simulieren oder im Maus-Fall(e) ^^ mit mouse_event. Oder nimm gleich SendInput. Soweit ich weiß is des andere Graffel eh längst veraltet und SendInput kümmert sich neuerdings eh um alles (Tastatur und Maus). GetAsyncKeyState frägt nämlich den Zustand der Taste ab, also sendet nix ^^
    Irgendwie hab ich des Gefühl des heute schon mal gesagt zu haben :p
    Vor ca. 30 Min oder so. Aber egal - kannst du ja nicht wissen. 🙂
    Lustiges déjà-vu.

    Für dein GetAsyncKeyState ist VK_R übrigens nicht definiert, wie für alle anderen Buchstaben im Alphabet und neben den Tasten 0-9 trifft das auch noch für einige andere (Special-) Tasten zu.
    Aber die Taste 'A' startet bei der Nummer 41, falls dir das weiterhilft.
    Wenn du folglich im Alphabet weiterzählst bis 'R', erhältst du den Wert 52 für die Taste 'R'.
    Ist übrigens in der MSDN schön aufgelistet mit den Key-Codes (Tabelle):
    http://msdn2.microsoft.com/en-us/library/ms645540(VS.85).aspx

    Greetings, Xzi-bit



  • Xzibit, danke für deine hilfe. Ich habe generell probleme mit dem code.

    #include <windows.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <winuser.h>
    
    int Mausklick();
    
    int a=0;
    int wahl=0;
    
    int main() {
      Sleep(5000);
    
      while(1) {  
        if(GetAsyncKeyState(VK_LBUTTON)) {
           Mausklick();
    
           Sleep(500);
    
           a = schuss+1;
           if(a == 30) {  
            SendInput(52);
           }
           printf("lh");
        }
      }
      return 0;
    }
    
    int Mausklick() {
       mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
       mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    }
    

    Wenn man halt die linkemaustaste gedrückt wird, werden so lande mausklicks simuliert bis sie losgelassen wird (was so nicht funktioniert. Nachdem ich einmal die maus gedrückt habe, hörts eifnach nicht mehr auf).

    Weiter soll nach dem 30 klick r gedrückt werden (was auch nicht geht).

    😞



  • Hi, hast du schonmal probiert den Code zu kompilieren? 🙄

    keypress schrieb:

    #include <unistd.h>
    #include <winuser.h>
    

    Kein Fehler aber umsonst inkludiert.

    keypress schrieb:

    a = schuss+1;
    

    "schuss" nicht deklariert.

    keypress schrieb:

    SendInput(52);
    

    SendInput hat 3 Parameter.
    ➡ http://msdn2.microsoft.com/en-us/library/ms646310.aspx

    keypress schrieb:

    int Mausklick() {
       mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
       mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    }
    

    "Mausklick()" hat einen Rückgabewert (int) und den sollte man auch angeben.

    return 0 ;
    

    Ich verstehe echt nicht, wie man einen Code posten kann, den man noch nicht mal kompiliert hat. Wie sollen wir denn helfen, wenn du keine konkreten Fragen hast? Oder sollen wir für dich Compiler spielen?

    MfG WilMen



  • Gekomiliert habe ich den code jedesmal. Bloß hatte ich die funktion SendInput ausgeklammert. Die Variable a habe ich hier im Forum noch eingesetzt und das int wohl vergessen.

    Nun den, wenn ich diesen code ausführe wird erstmal im sekundentakt eine 1 ausgegeben, nach dem drücken der linkenmaustaste auch eine 2, also so:
    11111111111121212121212121212121212121212121

    Ich wollte das aber eher so haben, dass immer wenn die linkemaustaste gedrückt wird eine 2 ausgegeben wird.

    Hier der code (und er lässt sich compilern):

    #include <windows.h>
    #include <stdio.h>
    
    int Mausklick();
    void VirtualKeyPress(BYTE byVirtualKeyCode);
    
    int schuss=0;
    int wahl=0;
    
    int main() {
      Sleep(5000);
    
      while(1) {  
        printf("1");
        Sleep(1000);
        if(GetAsyncKeyState(VK_LBUTTON)) {
           printf("2");
           Sleep(1000);
           Mausklick();
           schuss = schuss+1;
    /*       if(schuss == 30) {  
             printf("%i sf",schuss);
             // SendInput(1,key,sizeof(key));
             VirtualKeyPress('r');
             printf("l");
             }  */
        }
        Sleep(10);
     }
      return 0;
    }
    
    int Mausklick() {
       mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
       mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
       return 1;
    }
    
    void VirtualKeyPress(BYTE byVirtualKeyCode)
    {
        keybd_event(byVirtualKeyCode, 0, 0L, 0L);
        keybd_event(byVirtualKeyCode, 0, KEYEVENTF_KEYUP, 0L);
    }
    


  • Keiner ne ahnung warum die schleife nicht richtig läuft?



  • Naja,
    die Schleife funktioniert nicht, weil du einfach keine Ahnung von Programmierung und C hast. Ich würd sagen Back to Bascis, weil es ein Anfängerfehler ist, der sofort sichtbar ist wenn man sich das Problem einmal ansieht. Es ist doch ganz eindeutig, dass

    printf("1");
        Sleep(1000);
    

    in jedem Schleifendurchlauf ausgeführt wird selbst wenn die linke Maustaste gedrückt wurde oder nicht. Solche fehler muss man einfach auch als Anfänger sehen können sonst ist man einfach falsch bei der Programmierung...



  • @Hans_a_Supasta: es wäre nett, wenn du dich auf meinen code beziehen könntest. Ich sehe diesen fehler nähmlich nicht.


Anmelden zum Antworten