Hallo, wie mein Vorredner schon erwähnte, sind Keylogger nicht unbedingt beliebt unter normalen Usern. Dennoch hier ein Beispielcode
library hooker;
var
hMouseHook : Integer;
hKeyHook : Integer;
Hooked: Boolean;
////////////////////////////////////////////////////////////////////////////////////////////////
/// Eigentliche MouseHookFunktion
////////////////////////////////////////////////////////////////////////////////////////////////
function MouseHookProc(Code, wParam: Integer; var MouseStrut: TMOUSEHOOKSTRUCT): Integer; stdcall;
begin
//Hier kann ich machen was ich gerne möchte
TuWas
//Nachricht weiterschicken und nächsten Hook aufrufen
Result := 1;
Result:=CallNextHookEx(hMouseHook, Code, wParam, Integer(@MouseStrut));
end;
////////////////////////////////////////////////////////////////////////////////////////////////
/// Eigentliche KeyboardHookFunktion
////////////////////////////////////////////////////////////////////////////////////////////////
function KeyHookProc(Code, VirtualKey, KeyStroke: Integer): Integer; stdcall;
begin
result:=0;
//Passiert etwas ?
if (Code = HC\_ACTION)then
begin
TuSachen
end;
//Nachricht weiterschicken
CallNextHookEx(hKeyHook, Code, VirtualKey, KeyStroke);
end;
////////////////////////////////////////////////////////////////////////////////////////////////
/// Hooking starten
////////////////////////////////////////////////////////////////////////////////////////////////
function StartHook: Byte; export;
begin
Result := 0;
if Hooked then
begin
Result := 1;
Exit;
end;
//Hooks setzen
hMouseHook := SetWindowsHookEx(WH\_MOUSE , @MouseHookProc, hInstance, 0);
hKeyHook := SetWindowsHookEx(WH\_KEYBOARD, @KeyHookProc, hInstance, 0);
if hMouseHook \> 0 then
begin
Hooked := True;
end
else
begin
Result := 2;
end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////
/// Hooking beenden
////////////////////////////////////////////////////////////////////////////////////////////////
function StopHook: Boolean; export;
begin
if Hooked then
begin
Result := UnhookWindowsHookEx(hMouseHook);
Result := UnhookWindowsHookEx(hKeyHook);
end
else
begin
Result := True;
Hooked := False;
end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////
/// DLL Starten
////////////////////////////////////////////////////////////////////////////////////////////////
procedure DLLStart(dwReason: Cardinal);
begin
if (dwReason = Dll\_Process\_Detach) then
begin
UnhookWindowsHookEx(hMouseHook);
UnhookWindowsHookEx(hKeyHook);
end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////
/// Hauptfunktion
////////////////////////////////////////////////////////////////////////////////////////////////
begin
Hooked := False;
hMouseHook := 0;
hKeyHook:=0;
DLLProc := @DLLStart;
DLLStart(Dll\_Process\_Attach);
end.
Das ganze muß in eine DLL. Dann kann diese geladen werden und der Hook funktioniert Systemweit. Aber Vorsicht, ein Fehler im Speicher oder mit offenen Handles etc. und das System schmiert gnadenlos ab (zum Glück).
Natürlich gilt, was für alle DLLs gilt :
keine Strings ohne Memorymanager, alles als StdCall etc.
Mfg
Sven