Keyboard hook
-
Hallo,
hab in C# eine klasse programmiert, wie die Tastatur auslesen soll. Mit GetAsyncKeyState will ich den ScanCode kriegen und dann mit der darunter liegender Funktion ins Unicode konventieren. Bloß leider wandelt ToUnicodeEx nicht jede Taste um
...sodass er manchmal 0 zurückgibt, auch wenn diese Taste mit einem zB kyrillischen Buchstaben belegt ist ...
Ich weiß nicht, wo das Problem ist.// In C# static public string ConvertScanCodeToUnicode(int sc, int hkl) { Keys[] lpKeyState = new Keys[256]; int vk = MapVirtualKeyExW(sc, 2, (IntPtr)hkl); if (vk != 0) { StringBuilder sb = new StringBuilder(10); int rc = ToUnicodeEx(vk, sc, lpKeyState, sb, sb.Capacity, 0, (IntPtr)hkl); if (rc > 0) return sb.ToString(); else { // It's a dead key; let's flush out whats stored in the keyboard state. rc = ToUnicodeEx(vk, sc, lpKeyState, sb, sb.Capacity, 0, (IntPtr)hkl); return Enum.GetName(typeof(Keys), sc); } } else return string.Empty; }Kennt jemand alternative Methoden, wie man ein Unicode keylogger realisieren kann? Ich probiere eigentlich momentan eine Texterkennungsroutine und brauche unbedingt so ein keylogger. Er muss auch am besten tastendrucke erkennen, auch wenn das programm im hintergrund ist.
Gruß,
Garry
-
Dazu ist GetAsyncKeyState nicht geeignet.
-
was kann man dann verwenden?
-
Such mal nach Keyboard Hook hier im Forum oder schau dir alles rund um SetWindowsHookEx an.
edit: Mit GetAsyncKeyState kannst du afaik z.B. nicht bestimmen, ob, wenn 'a' gedrückt wurde, gleichzeitig auch Shift (zum Großschreiben) gedrückt wurde, sondern eben nur, ob seit dem letzten Aufruf diese Tasten gedrückt wurden; was auch hintereinander passiert sein kann.
-
stimmt, der ansatz ist besser. aber da habe ich ein problem, dass alles, was ich bis jetzt gefunden habe, ascii liefert???
Gruß,
Daniel
-
garry_weber schrieb:
stimmt, der ansatz ist besser. aber da habe ich ein problem, dass alles, was ich bis jetzt gefunden habe, ascii liefert???
Was liefert Ascii?
Du bekommst bei den entsprechenden Hooks alles: Scancodes Virtual keycodes. Was willst Du noch?
-
garry_weber schrieb:
aber da habe ich ein problem, dass alles, was ich bis jetzt gefunden habe, ascii liefert???
Bitte beachten: Es ist ein Keyboard-Hook!
D.h. Du kriegst nur die Informationen, wleche Tasten auf der Tastatur gedrückt sind. Nicht mehr!
Erwartest Du dagegen alle Informationen, die auch auf dem Bildschirm dargestellt werden, dann ist Dein Ansatz sicherlich der falsche, z.B.:
Gedrückte Taste "Alt" plus nacheinander die Zahlentasten "2","4" und "8" auf der Numpad -> Ergebnis ist das Grad-Symbol '°'.Ein Keyboard-Hook liefert KEINE Sonderzeichen wie das eben erwähnte Grad-Symbol '°' oder gar beliebige Unicode-Zeichen!
Martin
-
ich brauche unbedingt den scancode, damit ich das dann durch die oben stehende funktion zischen kann?
Gruß,
Garry