AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Maus- und Tastaturrecorder

Ein Thema von Schneck · begonnen am 25. Sep 2004 · letzter Beitrag vom 22. Mai 2006
Antwort Antwort
Seite 1 von 3  1 23      
Schneck

Registriert seit: 22. Jun 2004
18 Beiträge
 
Delphi 7 Personal
 
#1

Maus- und Tastaturrecorder

  Alt 25. Sep 2004, 17:56
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
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#2

Re: Maus- und Tastaturrecorder

  Alt 25. Sep 2004, 18:00
Sozusagen ein Mouse- and Keylogger, mit wiedergabefunktion

sebby
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#3

Re: Maus- und Tastaturrecorder

  Alt 25. Sep 2004, 19:03
Zitat von Schneck:
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!
Was genau kapierst du denn nicht?

Zitat von Schneck:
Das mit dem Speichern der Aufzeichnungen und Abspielen sollte ich irgendwie hinkriegen (ohne Hooks)
Logisch, denn Hooks werden vom System als Benachrichtigung an dich gesandt, also können Hooks schlecht ein Tastatur- oder Mausereignis auslösen!

Zitat von Schneck:
z. B. mit mouse_event(....) Befehlen, aber wie kann ich Maus- und Tastatureingabe ohne Hooks abfangen, wenn sie an andere Fenster gerichtet sind?
Garnicht (es sei denn du bastelst dir einen kleinen Treiber ... da aber Hooks genau das gleiche ermöglichen, wäre der Treiber wohl Overkill).
Es gibt eine Ausnahme, die ich in EDA benutze. Die funktioniert aber nur dadurch, daß die Maustaste gedrückt bleibt.

Zitat von Schneck:
kann mir da jemand mööööööglicherweise einen Tipp geben oder ein einfaches Hook-Beispiel zeigen, das auch in meinem Hirn funzt?!
Wie einfach muß es denn noch sein? Ich habe ja nicht nur Beispiele, sondern ein Tutorial zum Thema verfaßt.
  Mit Zitat antworten Zitat
Schneck

Registriert seit: 22. Jun 2004
18 Beiträge
 
Delphi 7 Personal
 
#4

Re: Maus- und Tastaturrecorder

  Alt 25. Sep 2004, 21:44
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.
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
  Mit Zitat antworten Zitat
Benutzerbild von edosoft
edosoft

Registriert seit: 27. Okt 2003
Ort: Wehingen
258 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Maus- und Tastaturrecorder

  Alt 26. Sep 2004, 00:43
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:
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;
achja
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.)
Angehängte Dateien
Dateityp: rar mousehook_dll.rar (2,9 KB, 125x aufgerufen)
Dominik Weber
www.edo-soft.com
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#6

Re: Maus- und Tastaturrecorder

  Alt 26. Sep 2004, 11:35
Zitat von Schneck:
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.
Gib dir selber etwas Zeit! Man lernt es nicht von heute auf morgen, daher lieber etwas mehr Zeit in die Lernphase investieren und etwas besseres als Resultat haben.

Zitat von Schneck:
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.
Eigentlich würde ich gerne jemanden haben, der das gemeinsam mit mir macht, denn ich bin kein guter Didakt, aber dafür umso besserer Autodidakt.

Zitat von Schneck:
Das mit dem Treiber programmieren war aber wohl ein Scherz?!
Nein, nur die Alternative zu globalen Hooks

Zitat von Schneck:
Fals ix weita nix kapir, bin i nochamal lästik...
Jäderzait - hir sint dier ale görn behülflich
  Mit Zitat antworten Zitat
Schneck

Registriert seit: 22. Jun 2004
18 Beiträge
 
Delphi 7 Personal
 
#7

Re: Maus- und Tastaturrecorder

  Alt 27. Sep 2004, 21:16
Bin fleißig beim Üben ( ). 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
  Mit Zitat antworten Zitat
Benutzerbild von edosoft
edosoft

Registriert seit: 27. Okt 2003
Ort: Wehingen
258 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Maus- und Tastaturrecorder

  Alt 28. Sep 2004, 20:31
Zitat von edosoft:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
Des war so gemeint dass du auf dein "Form1" ein "TAppEvents" oder so ähnlich plazierst und bei events auf "OnMessage" doppelklickst dann den rest des codes für diese funktion einfügen.
Dominik Weber
www.edo-soft.com
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: Maus- und Tastaturrecorder

  Alt 27. Aug 2005, 15:05
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von edosoft
edosoft

Registriert seit: 27. Okt 2003
Ort: Wehingen
258 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Maus- und Tastaturrecorder

  Alt 28. Aug 2005, 15:59
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:
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.
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.

ps: sorry wegen der verspäteten antwort, war auf ->rock am see

-dominik
Dominik Weber
www.edo-soft.com
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz