![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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 by Thomas Breitkreuz