Tastatur Eingabe Simulieren



  • Hallo,

    unter VB6 gabs ein Befehl um Tastatureingaben zu simulieren (sendkeys). Kann mir jemand den Befehl für C sagen ? Danke



  • wie wärs mit SendMessage WM_KEYDOWN + Tastencode?



  • SendInput oder keybd_event. Siehe MSDN 😉 .



  • UINT SendInput(

    UINT nInputs,
    LPINPUT pInputs,
    int cbSize
    );

    Das steht bei MSDN, bringt mich aber nicht weiter 😞 (Bin Anfänger)



  • keybd_event((unsigned char)VkKeyScan('6'), 0, 0, 0);
    

    Damit wuerdest du eine 6 schreiben. Dann gibts noch fuer RETURN :

    keybd_event(0x0D, 0, 0, 0);
    

    oder mit Shift

    keybd_event(VK_SHIFT,0x9d,0 , 0); // Shift druecken
    keybd_event(VK_SHIFT,0x9d,KEYEVENTF_KEYUP , 0); // Shift loslassen
    


  • Hallo,

    danke dir. Muss ich so jeden Buchstabe einzell machen ? Oder gibts da noch ein anderen Befehl für mehrere Zeichen ?



  • Naja du kannst sowas zum Beispiel machen

    char b1[8]="1234567";
    for(i=0; i<=sizeof(b1)-2; i++)
    {
      keybd_event((unsigned char)VkKeyScan(b1[i]), 0, 0, 0);
    }
    

    is jetzt aber ungetestet



  • Man sollte aber nach Möglichkeit SendInput verwenden (sorry das ich erst so spät poste), da diese Funktion neuer ist, und somit die alten Funktionen (keybd_event und mouse_event) ersetzen soll.

    Hab euch mal n Beispiel gebastelt:

    // Header: Windows.h
    
    /* [Esc] - Taste drücken */
    INPUT ipSignal;
    ipSignal.type           = INPUT_KEYBOARD;
    ipSignal.ki.wVk         = VK_ESCAPE;
    ipSignal.ki.wScan       = 0;
    ipSignal.ki.dwFlags     = 0;
    ipSignal.ki.time        = 0L;
    ipSignal.ki.dwExtraInfo = 0L;
    SendInput(1, &ipSignal, sizeof(INPUT));
    /* [Esc] - Taste loslassen */
    ipSignal.ki.dwFlags     = KEYEVENTF_KEYUP;
    SendInput(1, &ipSignal, sizeof(INPUT));
    

    Ist aber nicht getestet ⚠ .



  • CodeFinder schrieb:

    Man sollte aber nach Möglichkeit SendInput verwenden (sorry das ich erst so spät poste), da diese Funktion neuer ist, und somit die alten Funktionen (keybd_event und mouse_event) ersetzen soll.

    Hab euch mal n Beispiel gebastelt:

    // Header: Windows.h
    
    /* [Esc] - Taste drücken */
    INPUT ipSignal;
    ipSignal.type           = INPUT_KEYBOARD;
    ipSignal.ki.wVk         = VK_ESCAPE;
    ipSignal.ki.wScan       = 0;
    ipSignal.ki.dwFlags     = 0;
    ipSignal.ki.time        = 0L;
    ipSignal.ki.dwExtraInfo = 0L;
    SendInput(1, &ipSignal, sizeof(INPUT));
    /* [Esc] - Taste loslassen */
    ipSignal.ki.dwFlags     = KEYEVENTF_KEYUP;
    SendInput(1, &ipSignal, sizeof(INPUT));
    

    Ist aber nicht getestet ⚠ .

    Ich hab schon oft diese '0L' gesehen. Was heisst das ?



  • Das heißt das der Wert als long interpretiert wird. Ist also ein 'kurzer' Typcast.



  • BTW: bei Verwendung von keybd_event() muss (sollte) man auch 2 Aufrufe machen, einen zum "drücken" und einen zum "loslassen".
    Funktioniert ganz gut, SendInput geht auch fein.



  • hustbaer schrieb:

    Funktioniert ganz gut, SendInput geht auch fein.

    Hast Du meinen Code ausprobiert ?



  • CodeFinder schrieb:

    Hast Du meinen Code ausprobiert ?

    Nö, sorry, irgendwie krieg ich das nicht auf die Reihe so zu posten das man versteht was ich meine *schäm*

    Ich meinte ich hab sowohl keybd_event() als auch SendInput() schonmal verwendet, beides mit "erst down, dann up senden", und beides hat gut funktioniert. Damals, kurz nachm Krieg halt 🙂


Log in to reply