![]() |
Wiedermal Maushook
Hallo,
ich verwende folgenden code von den schweizern:
Delphi-Quellcode:
Um an die events der maus zu kommen.
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, StdCtrls; type TForm1 = class(TForm) ApplicationEvents1: TApplicationEvents; Button_StartJour: TButton; Button_StopJour: TButton; ListBox1: TListBox; procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); procedure Button_StartJourClick(Sender: TObject); procedure Button_StopJourClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } FHookStarted : Boolean; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var JHook: THandle; // The JournalRecordProc hook procedure is an application-defined or library-defined callback // function used with the SetWindowsHookEx function. // The function records messages the system removes from the system message queue. // A JournalRecordProc hook procedure does not need to live in a dynamic-link library. // A JournalRecordProc hook procedure can live in the application itself. // WH_JOURNALPLAYBACK Hook Function //Syntax // JournalPlaybackProc( // nCode: Integer; {a hook code} // wParam: WPARAM; {this parameter is not used} // lParam: LPARAM {a pointer to a TEventMsg structure} // ): LRESULT; {returns a wait time in clock ticks} function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall; var Char1: PChar; s: string; begin {this is the JournalRecordProc} Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut)); {the CallNextHookEX is not really needed for journal hook since it it not really in a hook chain, but it's standard for a Hook} if Code < 0 then Exit; {you should cancel operation if you get HC_SYSMODALON} if Code = HC_SYSMODALON then Exit; if Code = HC_ACTION then begin { The lParam parameter contains a pointer to a TEventMsg structure containing information on the message removed from the system message queue. } s := ''; if EventStrut.message = WM_LBUTTONUP then s := 'Left Mouse UP at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH); if EventStrut.message = WM_LBUTTONDOWN then s := 'Left Mouse Down at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH); if EventStrut.message = WM_RBUTTONDOWN then s := 'Right Mouse Down at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH); if (EventStrut.message = WM_RBUTTONUP) then s := 'Right Mouse Up at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH); if (EventStrut.message = WM_MOUSEWHEEL) then s := 'Mouse Wheel at X pos ' + IntToStr(EventStrut.paramL) + ' and Y pos ' + IntToStr(EventStrut.paramH); if (EventStrut.message = WM_MOUSEMOVE) then s := 'Mouse Position at X:' + IntToStr(EventStrut.paramL) + ' and Y: ' + IntToStr(EventStrut.paramH); if s <> '' then Form1.ListBox1.ItemIndex := Form1.ListBox1.Items.Add(s); end; end; procedure TForm1.Button_StartJourClick(Sender: TObject); begin if FHookStarted then begin ShowMessage('Mouse is already being Journaled, can not restart'); Exit; end; JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);//<-------------------------hier bei dem "@JournalProc" {SetWindowsHookEx starts the Hook} if JHook > 0 then begin FHookStarted := True; end else ShowMessage('No Journal Hook availible'); end; procedure TForm1.Button_StopJourClick(Sender: TObject); begin FHookStarted := False; UnhookWindowsHookEx(JHook); JHook := 0; end; procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin {the journal hook is automaticly camceled if the Task manager (Ctrl-Alt-Del) or the Ctrl-Esc keys are pressed, you restart it when the WM_CANCELJOURNAL is sent to the parent window, Application} Handled := False; if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin {make sure you unhook it if the app closes} if FHookStarted then UnhookWindowsHookEx(JHook); end; end. Wenn ich den code aber mal testcompilieren will, bekomm ich folgenden Error: Zitat:
Wo is hier der wurm drin ?! MfG - Ghost007 |
Re: Wiedermal Maushook
Vielleicht so?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, StdCtrls; type TForm1 = class(TForm) ApplicationEvents1: TApplicationEvents; Button_StartJour: TButton; Button_StopJour: TButton; ListBox1: TListBox; procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); procedure Button_StartJourClick(Sender: TObject); procedure Button_StopJourClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } FHookStarted : Boolean; public { Public declarations } end; var Form1: TForm1; ////////// function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall; ////////// implementation ... |
Re: Wiedermal Maushook
hm, jetzt läufts zwar, aber die application friert komplett ein, und windows auch, es geht nur noch der taskmanager über STRG + ALT + Entf
|
Re: Wiedermal Maushook
Ich hab genau deinen Code genommen und er geht.
Ich kann die Form während der Laufzeit verschieben, vergrößern, also wie normal. [ot] Du wirst es nicht glauben, genau das habe ich schon wieder gesucht! Vielleicht haben wie ja das selbe Projekt :mrgreen: [/ot] |
Re: Wiedermal Maushook
lol nu geht der code bei mir auch .... anscheinend darf man den hook nich zu oft ein/ausschalten während einer session >_>
MfG - Ghost007 P.S.:Was haste denn für 'n projekt ?! |
Re: Wiedermal Maushook
Zitat:
|
Re: Wiedermal Maushook
achso, ne ich bau ein applet für die G15 tastatur von logitech (die mit dem LCD) ;) auf dem LCD sollen tasten anschläge und mausstats angezeigt werden ;)
MfG - Ghost007 |
Re: Wiedermal Maushook
Achso ja. Hätte ich auch drauf kommen können. Das Thema "Terminal-Font" hab ich auch gelesen. :wall: :wall: :mrgreen:
|
Re: Wiedermal Maushook
Ich hab einen Fehler entdeckt: :mrgreen:
Bei ApplicationEvents1Message: JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0 hInstance, 0); Sonst geht der Hook nach Strg-Alt-Entf nicht mehr... Hier der gesamte Code:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin Handled := False; if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then //falsch: //JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0); //richtig: JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0); end; |
Re: Wiedermal Maushook
bei mir friert die Anwendung ständig ein, wenn ich das Programm mit Windows booten lasse, und ein paar Fenster geöffnet sind, dann eigentlich immer ohne Ausnahme.
Obwohl ich diesen Tip schon berücksichtigt habe: ![]() an was kann das noch liegen? vielen Dank !! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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