At-Zeichen mit keybd_event international?
-
Hallo zusammen,
Ich soll listenweise Informationen an ein Programm übergeben, hierzu lasse ich einfach mit keybd_event die Tasten simulieren die das Programm aufnimmt. Unter den Informationen sind sind Namen, Alter etc aber auch E-Mail Adressen.
Das @-Zeichen ist leider nicht bei den virtual key-codes, und da das Programm laut meinem Auftraggeber auch auf unbekannten (ausländischen) Computern funktionieren soll, weiß ich nicht wie ich das Zeichen nun übergeben kann, da unterschiedliche Tastenkombinationen je nach Länder-Tastatur verwendet werden.
Ich hoffe ihr könnt mir helfen
-
Geht Alt+64?
https://www.igumbi.com/de/blog/das-at-symbol-bei-windows-browser-tests-in-vm-mit-alt-64
http://tools.oratory.com/altcodes.html
-
Das funktioniert zwar in echt, aber nicht über dem Programm
-
Hier gibt es eine Umwandlung von Zeichen zu Virtual-Keycode aber ich versteh nicht wie ich dies mit keybd anwende kann
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646329(v=vs.85).aspx
-
Kannst du "SendInput" verwenden? Damit geht es definitiv:
INPUT input = {0}; input.type = INPUT_KEYBOARD; input.ki.dwFlags = KEYEVENTF_UNICODE; input.ki.wScan = 0x0040; //Unicode @ char SendInput(1, &input, sizeof(input));
"SendInput" ist der Nachfolger von "keybd_event", ich glaube mit "keybd_event" geht das gar nicht.
-
Es geht auch mit keybd_event, aber das kann man sich eigentlich sparen. Es gibt ja SendInput.
Der Weg wäre:
1. Mit VkKeySvan den Scancode ermitteln.
2. Anhand des Scanncodes Alt, Strg, Shift Taste bestimmen und mit keybd_event den key down simulieren.
3. Dann den Scancode per key down und key up simulieren.
4. Anschließend wider die entsprechenden Alt, Strg, Shift Taste den key up simulieren.Das geht.
Aber da keybd_event deprecated ist, ist SendInput der richtige Weg.
-
Es würde auch gehen, entsprechene WM_CHAR Nachrichten and das aktuelle Fenster zu senden.
-
roflo schrieb:
Es würde auch gehen, entsprechene WM_CHAR Nachrichten and das aktuelle Fenster zu senden.
Nein! Ich weiß nicht warum alle so etwas immer denken.
Das Senden einer WM_CHAR Nachricht ist nicht das gleiche wie eine Simulation über SendInput und keybd_event.
-
Und warum nicht? Greift dein keylogger sonst nicht?
-
Weil ein Programm, dass zum Beispiel nur WM_KEYDOWN für eine Befehls Sequenz auswertet, das @ Zeichen nicht mitbekommen würde.
Weil zum Beispiel die entsprechenden Keystates nicht gesetzt werden...Es ist vollkommen unsinnig zu denken, dass ein WM_CHAR auch nur annähernd das machen würde was bei einer "normalen" Tastatureingabe passiert.
-
Ja da hast natürlich recht. Aber wenn es ein 'normales' programm mit windows' inputboxen ist, passt das doch.
-
roflo schrieb:
Ja da hast natürlich recht. Aber wenn es ein 'normales' programm mit windows' inputboxen ist, passt das doch.
Ich habe zu oft erlebt, das es nicht passt. Deshalb würde ich diesen Weg eben nicht empfehlen.
-
Na gut
Mit SendInput & co könnte man das programm aber wiederum nicht im hintergrund arbeiten lassen. Mit WM_CHAR bzw. dann eben WM_KEYDOWN würde das schon gehen. Oder überhaupt das mit der simulation sein lassen.