![]() |
Maus- und Tastaturrecorder
Hallo,
ich hätte gerne einen Maus- und Tastaturecorder selbst programmiert ... nur die einfachsten Grundfunktionen: Aufzeichnen von Mausklicks und Tastatureingaben. Speichern der Aufzeichnungen in einem editierbaren Textfeld. Abspielen der Aufzeichnung. Das kann doch nicht so schierig sein. Hab mich eingelesen und bin immer und immer wieder auf die Info gestoßen, dass man dabei um Hooks nicht herumkommt. Hooks sind aber ein Level zu hoch für mich, hab mir auch verschiedene Programmierbeispiele von Asserbad und Co angesehen, kappier aber sauber nix! Das mit dem Speichern der Aufzeichnungen und Abspielen sollte ich irgendwie hinkriegen (ohne Hooks) z. B. mit mouse_event(....) Befehlen, aber wie kann ich Maus- und Tastatureingabe ohne Hooks abfangen, wenn sie an andere Fenster gerichtet sind? kann mir da jemand mööööööglicherweise einen Tipp geben oder ein einfaches Hook-Beispiel zeigen, das auch in meinem Hirn funzt?! Grüße Schneck Dankt ;-) |
Re: Maus- und Tastaturrecorder
Sozusagen ein Mouse- and Keylogger, mit wiedergabefunktion
sebby :zwinker: |
Re: Maus- und Tastaturrecorder
Zitat:
Zitat:
Zitat:
Es gibt eine Ausnahme, die ich in ![]() Zitat:
![]() |
Re: Maus- und Tastaturrecorder
Hallo Assarbad,
nun ja, das mit dem nullokapieren bezieht sich auf meine minimale Programmiererfahrung ... habe gestern zum erstenmal überhaupt überrissen, was DLLs sind und dass man sie selber machen kann und heute will ich Hooks verstehen ... wollte ich eigentlich nicht und hab deshalb nach einen anderen Weg gefragt. :mrgreen: Naja nutzt nix, werd mir dein Hook-Tutorium doch genauer zu Gemüte ziehen müssen. Das beigelegt Beispiel (Sourcecode) zum Downloaden war für mich etwas zu unübersichtlich, aber dein pdf ist einfach Spitze, sehr ausführlich und übersichtlich. Großes Kompliment, hab im weiten www lange gesucht aber nichts vergleichbares (deutschsprachiges) gefunden. Das mit dem Treiber programmieren war aber wohl ein Scherz?! Fals ix weita nix kapir, bin i nochamal lästik... Bis dahin danke für die Rückmeldung Grüße Schneck |
Re: Maus- und Tastaturrecorder
Liste der Anhänge anzeigen (Anzahl: 1)
mit nem treiber würds wohl besser gehen aber für dein zweck ist ein hook doch recht gut.
ich hab mir mal da ein maushook gebaut, ne dll halt. (anhang) die dll fügst dann so ein:
Delphi-Quellcode:
achja
const
WM_MOUSE_HOOK = WM_USER + 52013; function Mouse_CreateHook(hWnd: HWND): Boolean; stdcall; external 'MouseHook.dll'; function Mouse_DeleteHook: Boolean; stdcall; external 'MouseHook.dll'; //init Mouse_CreateHook(Application.Handle); //finish Mouse_DeleteHook; procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); var X, Y: Integer; begin if Msg.message = WM_MOUSE_HOOK then begin X := Msg.wParam; //x-koordinate der maus Y := Msg.lParam; //y-koodrinate [..] end; end; diese funktion registriert halt sowas wie ein OnMouseMove event, aber halt global. du könntest ja dann zum biespiel alle punkte speichern, die da mit dem event oben ausgegeben werden, und nachher halt wieder so abspielen. (das ist en event von einem tAppEvents.) |
Re: Maus- und Tastaturrecorder
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Maus- und Tastaturrecorder
Bin fleißig beim Üben ( :cheers: ). Aber bis was ansehnliches rauskommt dauert's noch ein Weilchen.
Den Code von edesoft hab ich noch nicht zum Laufen gebracht, aber mach nix, ich bastel einfach ein bischen herum. Sobald jedenfalls konkrete unüberwindliche psychtraumatische egozerstöhrende selbstzerfleischende Wissenslücken sich meinem einfältigen Geist entgegenstellen, und das werden sie ganz bestimmt (Murphy's Gesetz!), meld ich mich wiiiiiiiieder. Bis dahin Grüße vom Schneck |
Re: Maus- und Tastaturrecorder
Zitat:
|
Re: Maus- und Tastaturrecorder
ich hol den thread mal wieder hoch....wärest du eventuell bereit denn quelltext dieser dll offenzulegen?
ich möchte so etwas ähnliches machen, möchte aber ungern eine dll nehmen :) |
Re: Maus- und Tastaturrecorder
hi,
@glkgereon: das geht leider nur per dll (soviel ich weis, wenns nicht stimmt bitte berichtigt mich). wenn du einen hook im programm drin machst dann gilt er nur für das programm, d.h. du kriegst keine tastatur rückgaben wenn das fenster des programms nicht aktiv ist. wenn du aber den hook in einer dll datei anwendest wird er systemweit ausgeführt und die tastaturrückgabe funktioniert immer, egal welches programm gerade aktiv ist. quellcode der keyhook-dll
Delphi-Quellcode:
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. quellcode der maushook dll:
Delphi-Quellcode:
der quellcode stammt nicht vollständig von mir ich hab ihn irgendwo rausgenommen und ein bischen optimiert (was ich vielleicht nochmal tun sollte...) kann gut sein dasses da bessere versionen gibt mein tastaturhook funktioniert auch nocht so richtig beispielsweise wir die nach-links taste als %-zeichen ausgegeben und ein anschlag auf der f1 taste wird als "p" ausgegeben.
library MouseHook;
uses Windows, Messages; {$R *.res} type PHWND = ^HWND; const WM_MOUSE_HOOK = WM_USER + 52013; var hHook: LongWord = 0; hWndBuffer: PHWND; hMMF: THandle; function MouseProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall; var P: TPoint; begin Result := CallNextHookEx(hHook, nCode, wParam, lParam); if nCode < 0 then Exit; GetCursorPos(P); P.Y := P.Y; PostMessage(hwndBuffer^, WM_MOUSE_HOOK, P.X, P.Y); end; function Mouse_CreateHook(hWnd: HWND): Boolean; stdcall; var bHWND: PHWND; begin hMMF := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE or SEC_COMMIT, 0, SizeOf(hWnd), 'EDO-SoftMouseHookHandle'); bHWND := MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, SizeOf(HWND)); bHWND^ := hWnd; UnmapViewOfFile(bHWND); GetMem(hWndBuffer, SizeOf(HWND)); hWndBuffer^ := hWnd; if hHook = 0 then hHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, hInstance, 0); Result := hHook <> 0; end; function Mouse_DeleteHook: Boolean; stdcall; begin FreeMem(hWndBuffer); CloseHandle(hMMF); Result := UnhookWindowsHookEx(hHook); hHook := 0; end; exports Mouse_CreateHook, Mouse_DeleteHook; var MMF: THandle; begin MMF := OpenFileMapping(FILE_MAP_READ, false, 'EDO-SoftMouseHookHandle'); if MMF <> 0 then begin hWndBuffer := MapViewOfFile(MMF, FILE_MAP_READ, 0, 0, SizeOf(HWND)); CloseHandle(MMF); end; end. ps: sorry wegen der verspäteten antwort, war auf ->rock am see -dominik |
Re: Maus- und Tastaturrecorder
Liste der Anhänge anzeigen (Anzahl: 1)
Ist zwar jetzt leicht Off-Topic... aber unter Win3.x war so ein Programm serienmäßig dabei ;) ...
|
Re: Maus- und Tastaturrecorder
hi ich habs schonmal angefangen und zwar
![]() ABER: Ich scheitere daran, dass jeder Tastaturhook von meinem AntivirenProgramm erkannt wird. Somit ist das Programm... hmmm... sagen wir unschön :) |
Re: Maus- und Tastaturrecorder
Zitat:
Der Benutzer darf ruhig erfahren, dass sich eine neue (noch nicht autorisierte) DLL in fast allen Prozessen befindet. Zumal der Benutzer ja nur einmal entscheiden muss ob er der DLL vertraut (oder nicht). |
Re: Maus- und Tastaturrecorder
Hi,
FriFra: das programm kenn ich des ist super damit kann mans ja auch wieder abspielen :) MisterNiceGuy: liegt vielleicht daran dass du eine dll genommen hast die das virenprogramm schon kennt. wenn du aber selber eine schreibst bzw. die von mir nimmst und das virenprogramm die datei nicht kennt sollte es gehen. ich hab nurton 2005 drauf und bei mir geht die datei ohne probleme. |
Re: Maus- und Tastaturrecorder
Jeder bessere Virenscanner sollte eigentlich einen Tastaturhook erkennen. AntVir ekennt meine Hook DLL von meinem LuckieSpy auch.
|
Re: Maus- und Tastaturrecorder
vielleicht is deine dll dem symantec team halt schon bekannt oder du hast irgendwelchen standard code drin der halt auch vonnem virus benützt wird...
|
Re: Maus- und Tastaturrecorder
Zitat:
|
Re: Maus- und Tastaturrecorder
Liste der Anhänge anzeigen (Anzahl: 1)
hi,
MisterNiceGuy: kannst du mal testen ob meine dll mit deinem virenscanner geht? ich hab mein testprogramm "keycount" angehängt das zählt die tastenanschläge und die mausbewegung in pixeln(wobie die falsch berechnet wird...) jedenfalls benützt das programm beide meiner dlls, die für die maus und für die tastatur. bitte mal testen und berichten was dein virenscanner dazu sagt :) thnx |
Re: Maus- und Tastaturrecorder
Hi ich bin erstm morgen wieder zuhause, aber dann probier ich's gleich aus :) Ich benutze übrigens AntiVir!
|
Re: Maus- und Tastaturrecorder
Hmm... ich weiß jetzt nicht genau ob das das gleiche ist.
Aber meiner Meinung nach hab ich genau solche Hooks auch in meinem Programm ohne DLL. Und es funktioniert auch ohne, dass das Form im Vordergrund ist. Im Gegenteil, es gibt nicht mal ein Form.
Delphi-Quellcode:
Und ja und nein. Norton Antivirus (2003) reagiert nicht auf die Hooks. Aber ZoneAlarm schlägt Alarm. Es muss irgendwie über diese Hooks sitzen :)
// ...
RegisterHotKey (Form1.Handle, ord ('O'), MOD_CONTROL, ord ('O')); // ... |
Re: Maus- und Tastaturrecorder
@edosoft: keycount
Dein Programm hat grad beim Beenden meinen Rechner flach gelegt. Zumindest ist der Explorer tot O.o Das Programm selbst reagiert nicht mehr und die Taskleiste auch nicht mehr :cyclops: :gruebel: Edit: Habs grad nochmal ausprobiert. Beim Beenden über das "X" am Programmfenster funzt alles. Beim Beenden über die Taskleiste, also Rechtsklick auf Taskleistenschaltfläche und dann auf schließen lasstet den Prozessor zu 99 % aus und der Rest bekommt keinen Saft mehr :stupid: Gleiches passiert wenn ich das Programm übers Systemmenü des Programmes (Rechtsklick auf Titelleiste, oder Linksklick auf Programmicon) schließe. Scheint als rennt da irgendwas in eine Endlosschleife. |
Re: Maus- und Tastaturrecorder
hi puhbaer,
stimmt, bei mir ist des auch so ich gucks mir gleich mal an wos problem liegen könnte. ps: da ist halt ein multicore oder zimindest HT system gschickt da lastets den prozessor nur 50% aus... mfg. |
Re: Maus- und Tastaturrecorder
Warum hilft man da überhaupt, im PureBasic Forum hat auch einer einen Hook geschrieben, muss das wirklich sein ? Ich würde es mich garnicht wagen so etwas zu fragen.
|
Re: Maus- und Tastaturrecorder
So, Thread lange her, aber nach wie vor aktuell.
Nachdem mich eine Mail mit einer Frage über dieses Thema erreichte mach ich hier mal weiter: (Da die Mail nichts privates enthält veröffentliche ich sie hier einfach mal:) Zitat:
![]() knüpfe ich hier an beide Theman an. (bla) Ok mal schauen. Also wie man Hooks ohne DLLs hinbekommt weiß ich gar nicht. Und ob die Funktion RegisterHotKey mit oder ohne DLLs arbeitete wusste ich auch nicht wirklich. Also, wie weiter? Strg halten und Klick auf die Funktion RegisterHotKey im Delphi. Editor springt darauf hin in die Unit Windows.pas. Und was steht hinter dieser Funktion? Zitat:
Somit ist klar, mein Programm für Tastaturhooks verwendet ebenfalls eine DLL. Allerdings ist diese bereits fertig im Windows vorhanden. Aus dem Grunde habe ich auch in diesem Thread fortgesetzt um das von mir oben beschriebene zu korrigieren. So, agm65. Eine Funktion für Hooks für die Maus hält die Unit so wie es aussieht nicht bereit. Aber nun: RegisterHootKey verwendet eine DLL. Was spricht nun noch dagegen die benannte Maus-DLL zu verwenden? Gruß, Robert |
Re: Maus- und Tastaturrecorder
Hallo,
ich hab das mal ausprobiert die ganze dll in das programm direkt rein zu implementieren. allerdings hat das nur bestätigt was ich schon gehört hatte - wenn du einen hook im programm verwendest dann greift er nur auf eben dein programm. als dll hast du aber die möglichkeit einen systemweiten hook zu basteln - und genau das wollen wir ja. du kommst also bei nem systemweiten hook nicht um die verwendung einer dll rum. (du kannst ja die dll in die exe reinpacken und dann beim start entpacken oder so.) -dominik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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