![]() |
KeyHook - Kleine Einsteigerhilfe gesucht
Huhu!
Erstmal: Ich habe nicht das Problem 'Wie programmiere ich einen Keylogger' oder 'Wie sende ich Tasten an ein anderes Fenster', nein , ich HABE einen Keylogger programmiert bzw. mir die Codes aus dem besten Delphi Forum -> DP :mrgreen: gesucht und mir mal ein Programm zusammengeschnipselt. Hier mein Problem, bei dem ich hoffe, dass es gelöst werden kann: Ich habe die dll KeyHook.dll
Delphi-Quellcode:
So nun verwende ich die auch in meinem Programm. Geht alles schön und gut.
library KeyHook;
uses Windows, Messages; {$R *.res} type PHWND = ^HWND; const WM_KEYBOARD_HOOK = WM_USER + 52012; var hHook: LongWord = 0; Key: Word; KeyboardLayout: HKL; GetShiftKeys: Boolean; hWndBuffer: PHWND; hMMF: THandle; function KeyboardProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall; var LastKey: Char; KeyState: TKeyboardState; begin Result := CallNextHookEx(hHook, nCode, wParam, lParam); if nCode < 0 then Exit; KeyboardLayout := GetKeyboardLayout(0); GetKeyboardState(KeyState); if ToAsciiEx(wParam, MapVirtualKeyEx(wParam, 2, KeyboardLayout), KeyState, @LastKey, 0, KeyboardLayout) > 0 then Key := Ord(LastKey) else Key := wParam; if ((lParam and $80000000) = 0) and (not (wParam in [16, 17, 18]) or GetShiftKeys) then PostMessage(hwndBuffer^, WM_KEYBOARD_HOOK, Key, GetActiveWindow); end; function Key_CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; var bHWND: PHWND; begin hMMF := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE or SEC_COMMIT, 0, SizeOf(hWnd), 'EDO-SoftKeyHookHandle'); bHWND := MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, SizeOf(HWND)); bHWND^ := hWnd; UnmapViewOfFile(bHWND); GetMem(hWndBuffer, SizeOf(HWND)); hWndBuffer^ := hWnd; GetShiftKeys := ShiftKeys; if hHook = 0 then hHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, hInstance, 0); Result := hHook <> 0; end; function Key_DeleteHook: Boolean; stdcall; begin FreeMem(hWndBuffer); CloseHandle(hMMF); Result := UnhookWindowsHookEx(hHook); hHook := 0; end; exports Key_CreateHook, Key_DeleteHook; var MMF: THandle; begin MMF := OpenFileMapping(FILE_MAP_READ, false, 'EDO-SoftKeyHookHandle'); if MMF <> 0 then begin hWndBuffer := MapViewOfFile(MMF, FILE_MAP_READ, 0, 0, SizeOf(HWND)); CloseHandle(MMF); end; end. Nur wenn der Benutzer z.B. die Funktionstaste F1 oder F2 ... drückt, erscheint das von der DLL nicht einfach so. Ich habe das folgendermaßen gelöst:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); var S: String; begin if Msg.message = WM_KEYBOARD_HOOK then // --------------------------- Beginn der Sonder und Ausnahmefunktionen begin if Msg.wParam = 13 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Enter>'; Exit; end; if Msg.wParam = 32 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Spacebar>'; Exit; end; if Msg.wParam = 112 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F1">'; Exit; end; if Msg.wParam = 113 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F2">'; Exit; end; if Msg.wParam = 114 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F3">'; Exit; end; if Msg.wParam = 115 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F4">'; Exit; end; if Msg.wParam = 116 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F5">'; Exit; end; if Msg.wParam = 117 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F6">'; Exit; end; if Msg.wParam = 118 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F7">'; Exit; end; if Msg.wParam = 119 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F8">'; Exit; end; if Msg.wParam = 120 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F9">'; Exit; end; if Msg.wParam = 121 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F10">'; Exit; end; if Msg.wParam = 122 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F11">'; Exit; end; if Msg.wParam = 123 then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F12">'; Exit; end; if Msg.wParam = VK_BACK then begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Backspace>'; Exit; end; //------------------------ Ende der Sonder und Ausnahmefunktionen Memo1.Lines.Text := Memo1.Lines.Text + (Chr(Msg.wParam)); end; end; So nun ist da ein kleines Problem: Ich möchte nicht andauernd
Delphi-Quellcode:
eingeben.
if Msg.wParam = {Irgendeine Taste} then
begin Memo1.Lines.Text := Memo1.Lines.Text + #13 + 'Irgend ne Taste'; Exit; Meine Frage: Gibt es da eine Methode, den Quelltext zu verkürzen? Ich meine also z.B.
Delphi-Quellcode:
oder so.. nur im "grafischen" Sinne
120: '<Function Key F9>';
121: '<Function Key F10>'; Hab mich damit noch nie so richtig beschäftigt, kenne mich da also nicht so aus. Weiß einer wie das geht? P.S.: Die, die das jetzt immer noch ned geblickt haben ( :mrgreen: ): Ich möchte den Quelltext bei
Delphi-Quellcode:
verkürzen :D
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); |
Re: KeyHook - Kleine Einsteigerhilfe gesucht
Hi,
Code lässt sich geringfügig kürzen:
Delphi-Quellcode:
Cu, Frank
case msg.wParam of
13: Memo1.Lines.Add('<Enter>'); 32: Memo1.Lines.Add('<Spacebar>'); // Funktionstasten 112..123: Memo1.Lines.Add(format('<Function Key "F%d">',[msg.wParam - 111])); VK_BACK: Memo1.Lines.Add('<Backspace>'); else Memo1.Lines.Add(Chr(Msg.wParam)); end; |
Re: KeyHook - Kleine Einsteigerhilfe gesucht
Zitat:
Edit: Noch n Fehler... |
Re: KeyHook - Kleine Einsteigerhilfe gesucht
Ich sehe gerade: Wenn ich "s" drücke, kommt im Memo "Function Key F4" und bei anderen Tasten auch...
Wie behebt man das? P.S.: Bitte neue Antwort schreiben =) thx |
Re: KeyHook - Kleine Einsteigerhilfe gesucht
Hat da keiner ne Antwort drauf?
*Push* ^^ (Sagt mir bitte, wenn man ned pushen darf) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz