Hi
Wir haben in der schule schon länger was mit files und so gemacht und eben dann auch , das man Texte in ein edit fenster schreibt und beim klick auf nen Button in eine Datei gespeichert wird.
Jetzt würde mich nur mal interessieren wie man es machen könnte, dass das Programm praktisch im Hintergrund läuft, also nicht direkt angewählt ist, und wenn man dann z.b. auf der tastatur „rumklimpert“, er alles praktisch wie vorher " aufzeichnet" und beim drücken auf die ENTER Taste, das ganze wieder normale in eine gewünschte Datei abspeichert.
Wäre toll, wenn ihr ein paar tipps oder vorschläge hättet.
tschau
Hinweis 1: es gibt unter Windows die Möglichkeit systemweiter „Hooks“, u.a. auch um für jeden Tastendruck eine selbstdefinierte Routine aufzurufen. Das steigt allerdings ziemlich tief in die Systemprogrammierung ein, Näheres müsste unter dem Stichwort Hook in der Win32-Dokumentation zu finden sein.
Hinweis 2: Keyboard-Logger können vernünftigen Zwecken dienen, aber auch (meistens) zum Passwort-Diebstahl oder zur heimlichen Überwachung von Mitarbeitern. Das Ganze bewegt sich also am Rand der Legalität, und brauchbare Schutzprogramme sollten Keyboard-Logger abblocken.
Reinhard
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
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