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