Tastendrücke Senden
-
Servus, also ich wollte ein kleines Programm schreiben das Tastendrücke in ein Fenster sendet.
Funktioniert auch wenn man es mit keybd_event macht:
//Tastenkombination STRG+Akeybd_event(VK_CONTROL, 0, 0, 0); keybd_event('A', 0, 0, 0); Sleep(50); keybd_event(VK_CONTROL, 0,KEYEVENTF_KEYUP, 0);Allerdings muss dazu das Fenster ja im Fordergrund sein.
Also hab ich bei der weiteren Suche auf SendMessage gestoßen um etwas in ein Fenster das zum bsp. Minimiert ist zu senden.
Einzelne Buchstaben kann ich mit:SendMessage(eVehwnd,WM_CHAR,'A', 0);absetzen.
Wenn ich jetz aber zum Bsp. wieder die Kombination STRG+A erzeugen will funktioniert das nicht.
HWND eVehwnd = FindWindow(NULL, "EVE"); SendMessage(eVehwnd,WM_KEYDOWN,VK_CONTROL, 0); Sleep(50); SendMessage(eVehwnd,WM_CHAR,'A', 0); Sleep(50); SendMessage(eVehwnd,WM_KEYUP,VK_CONTROL, 0); Sleep(50);Hab auch die FAQ angeschaut
http://www.c-plusplus.net/forum/viewtopic-var-t-is-165868.html:
da steht SendMessage soll man dafür nicht verwenden. Aber warum?So wie es für mich scheint kann ich VK_CONTROL weder mit WM_KEYDOWN noch WM_CHAR absetzen. Wie mach ich das dann mit SendMessage?
Oder muss ich das zwangsweise nun mit SendInput wie in der FAQ machen?
Gruß Andy
-
-
ah ok thx habs mir grad mal durchgelesen, werds aber erst heut Abend ausprobieren können.
Aber wie ist das wenn ich das richtig verstanden hab kann ich damit keinen Tastendruck an ein minimiertes Fenster Schicken?
denn wenn ich z.bHWND eVehwnd = FindWindow(NULL, "EVE"); SendMessage(eVehwnd,WM_KEYDOWN,VK_F10, 0);gemacht habe wurde z.B F10 an das minimierte Spiel Gesendet und ein neues Fenster geöffnet. Auch wenn es minimiert war.
-
Korrekt! Per Design kann ein minimiertes Fenster niemals den Focus haben, folgerichtig also auch niemals per SendInput irgend welche Eingabe erhalten!
-
Okay vielen dank dann werde ich wohl kaum drumherum kommen das Fenster aktiv zulassen.
Nur eine Frage noch:
SendMessage(eVehwnd,WM_KEYDOWN,VK_CONTROL, 0);Liegt das nun am SebdMessage mit WM_KEYDOWN das die Control Taste im anderen Fenster nicht gedrückt wird oder am andern Fenster?
vielen Dank für die Hilfe

-
Death schrieb:
Okay vielen dank dann werde ich wohl kaum drumherum kommen das Fenster aktiv zulassen.
Nur eine Frage noch:
SendMessage(eVehwnd,WM_KEYDOWN,VK_CONTROL, 0);Liegt das nun am SebdMessage mit WM_KEYDOWN das die Control Taste im anderen Fenster nicht gedrückt wird oder am andern Fenster?
Das hängt davon ab wie eben geprüft wird ob die Taste gedrückt ist.
Das senden der nachricht ist een nicht gleichzusezen mit dem Drücken der Taste.
Der Key-State wird nicht geändert!
Wenn man mit GetKeyState prüft ob die Ctrl taste unten ist dann ist die eben nicht physikalisch unten gewesen!Ich habe doch den Link auf den Artikel gegeben. Da steht doch alles drin...
Man kann einen Tastendruck nicht mit SendMessage simulieren!