![]() |
Tastendruck im Hintergrund registrieren und Loggen
Moin moin liebe DPler,
ich habe folgendes Problem: und zwar haben wir in der Firma USB Panels auf denen die F1 bis F24 Tasten (also alle Funktionstasten)ausgelagert sind. Nun haben wir vor kurzem festgestellt das es hin und wieder mal einzelne Tasten nicht funktionieren. Um einen möglichen Fehler zu finden bzw. auszuschließen soll jetzt also ein Keylogger her, der im Hintergrund läuft und alle Tastendrücke (der F Tasten) mit Zeit mit loggt. Soweit so gut. Grundsätzlich habe ic hdas auch aber ich habe noch dasProblem: das meien Anwendung dazu im Vordergrund sein muss, damit sie auf den Tastendruck reagiert... und ich konnte noch keine Lösung dafür finden Hat da jemand einen Tipp oder Ratschlag? Danke! |
Re: Tastendruck im Hintergrund registrieren und Loggen
Wie kann man mit einem Keylogger nicht funktionierende Tasten loggen?
|
Re: Tastendruck im Hintergrund registrieren und Loggen
Hallo
Ein Keyboard Hook könnte eine Lösung sein. |
Re: Tastendruck im Hintergrund registrieren und Loggen
Ein Keylogger/Keyhook kann in der Hinsicht nützlich sein bzw. helfen da immer vier tasten zu einander gehören und wenn dann eine Taste mehrfach gerückt wird, bzw. die "Reihenfolge" durcheinander kommt dann hat man zumindest schon mal einen Anhaltspunkt. ZUmal das ganze noch mit einem Counter verbunden wird.
edit: ganz doofe Frage: Worin besteht der Unterschied zwischen einem Keylogger und eineme Keyhook? |
Re: Tastendruck im Hintergrund registrieren und Loggen
Zitat:
Mit einem Hook kannst du die Tasten global abfangen. |
Re: Tastendruck im Hintergrund registrieren und Loggen
Oder anders gesagt: der Hook ist das wie, und der Logger das was
|
Re: Tastendruck im Hintergrund registrieren und Loggen
ah gut....
Danke für die Tipps... werd mir dann wohl mal das Hook Tutorial vom DelphiTreff anschauen |
Re: Tastendruck im Hintergrund registrieren und Loggen
So nachem ich mich jetzt schon etwas mit Hooks auseinandergesetzt habe, jetzt doch noch mal eine Frage:
Ich habe folgende Funktion, die aufgerufen wird, was ich jetzt noch nicht so ganz gerafft habe sind die folgenden Punkte: 1. Wieso wird die gedrückte Taste viermal eingetragen, bzw. warum wird bei Funktionstasten nicht F1 etc angezeigt, sondern z, w, etc.? und 2. wie kann ich daraus jetzt ein Logfile mit Datum und Uhrzeit machen? (Mein Versuch mit
Delphi-Quellcode:
ist kläglich an eiskaltem schweigen gescheitert...)
WriteLog(Inttostr(lParam));
Delphi-Quellcode:
Besten Dank im voraus!!
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var sizewritten, hFile: LongWord; begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; FALSE: begin hFile := CreateFile('C:\LogFile.log', GENERIC_WRITE or GENERIC_READ, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if hFile <> INVALID_HANDLE_VALUE then try SetFilePointer(hFile, 0, nil, FILE_END); //WriteFile(hFile, lParam, sizeof(lParam), sizewritten, nil); WriteFile(hFile, wParam, sizeof(wParam), sizewritten, nil); finally CloseHandle(hFile); end; end; end; end; |
Re: Tastendruck im Hintergrund registrieren und Loggen
Hallo T.E., ich hoffe nicht, dass ich mal das Teil in einer Signatur eines Virenscanners finden werde!!
Delphi-Quellcode:
lg. Astatfunction KeyboardHookProc(code: Integer; wparam: WPARAM; lParam: LPARAM): LResult; stdcall; var LastKey: Char; KeyState: TKeyboardState; KeyboardLayout: HKL; Key: Word; begin Result := CallNextHookEx(HookHandle, Code, wParam, lParam); if Code < 0 then Exit else begin 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 then if not (wParam in [16, 17, 18]) then PostMessage(_hwndTarget, WM_USER + 8888, Key, GetActiveWindow); end; end; //-- WndProc der Empfänger Application procedure TForm1.WndProc(var message: TMessage); var sStr: String; begin if message.Msg = WM_USER + 8888 then begin // KeyHook Nachricht case message.wParam of VK_BACK : sStr := 'VK_BACK'; VK_TAB : sStr := 'VK_TAB'; VK_CLEAR : sStr := 'VK_CLEAR'; VK_RETURN : sStr := 'VK_RETURN'; VK_SHIFT : sStr := 'VK_SHIFT'; VK_CONTROL : sStr := 'VK_CONTROL'; VK_MENU : sStr := 'VK_MENU'; VK_PAUSE : sStr := 'VK_PAUSE'; VK_CAPITAL : sStr := 'VK_CAPITAL'; VK_NUMLOCK : sStr := 'VK_NUMLOCK'; else sStr := string(Chr(message.wParam)); end; WriterLog(time + sStr); end; inherited WndProc(message); end; |
Re: Tastendruck im Hintergrund registrieren und Loggen
Muss ein globaler Keyboard-Hook nicht in einer DLL liegen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 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