Einen schönen sonnigen Sonntag!
Trotz des schönen Wetters versuche ich mich gerade an einem kleinen Keylogger. Dazu habe ich eine fast perfekte DLL bei Torry gefunden:
www.swissdelphicente...showcode.php?id=1722
Das einzige Problem hierbei ist, dass die DLL Probleme bei der Erkennung von Gruoß-und Kleinbuchstaben hat...
Ich verwende eigentlich nur diesen Teil, da ich kein Memo benötige:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if ((KeyStroke and (1 shl 30)) <> 0) then begin GetKeyboardState(KeyState1); Count := ToAscii(VirtualKey, KeyStroke, KeyState1, AryChar, 0); if Count = 1 then begin SendMessage(hMemo, WM_CHAR, Ord(AryChar[0]), 0); PostMessage(hApp, WM_USER + 1678, Ord(AryChar[0]), 0); end; end; |
Was jetzt sehr komisch ist, dass
GetKeboardState nur dann ein richtiges Ergebnis liefert, wenn die Maus über dem Formular steht. Das Forumular muss nicht mal fokusiert sein, lediglich die Maus muss sich darüber befinden. Aber warum?!
Hier der Ausschnitt aus meiner DLL:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function KeyHook(code: integer; WParam: word; lParam: Longint): Longint; stdcall; var Wnd: hWnd; KeyState: TKeyBoardState; AryChar: array[0..1] of Char; begin Wnd:= FindWindow(WinClass, nil); Result:= 0;
if (Code = HC_NOREMOVE) or (Code<0) then exit;
if Code = HC_ACTION then if ((lParam and (1 shl 30)) <> 0) then begin GetKeyboardState(KeyState); if ToAscii(WParam, lParam, KeyState, AryChar, 0) = 1 then PostMessage(Wnd, KeyEvent, Ord(AryChar[0]), 0); end; Result := CallNextHookEx(HookHandle, Code, WParam, lParam); end; |
Weiß jemand, woran das liegt? Die Message empfang ich dann mittels
WndProc
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.WndProc(var Msg: TMessage); begin case Msg.Msg of KeyEvent: memo1.Text:= memo1.Text+Chr(Msg.WParam); end; end; |
Viele Grüße
Littleben