![]() |
Probleme mit Hooks
Hallo erstmal,
habe grade angefangen mich mit Hooks zu beschäftigen und würde ganz einfach gerne in einem Label auf meiner Form, die MousePosition ausgeben.Egal ob sich die Maus auf meiner Form oder im Nirvana (Sprich irgendwo auf dem Desktop) befindet. Könnt ihr mir da ein Beispiel zeigen wie ich das realisiere? Ehrlich gesagt komme ich mit den vorhanden Tutorials nicht zurecht... Ich hoffe ihr könnt mir da helfen?!! MFG Alex |
Re: Probleme mit Hooks
|
Re: Probleme mit Hooks
Nimm einen Timer stell den auf 50ms oder so und lese über Mouse.CursorPos die Position der Maus aus ;)
Dafür braucht man noch keine Hooks. |
Re: Probleme mit Hooks
ja ich weiß das es mit Timer geht, aber ich will das eben versuchen mit Hooks zu realisieren weil dann später ja mehr dazu kommt. Und bei den späteren Vorstellungen von mir reichen die Timer nicht mehr...
Trotzdem danke für die Antworten MFG Alex |
Re: Probleme mit Hooks
|
Re: Probleme mit Hooks
ja habe ich schon angeguckt nur weiß ich nicht so recht, wo der Fehler in meinem Prog ist?!!
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } procedure WMNCHITTEST(var Message: TWMMouseMove); message WM_NCHITTEST; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; public { Public-Deklarationen } end; var Form1: TForm1; hMouseHook: HHOOK; function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): Integer; stdcall; implementation {$R *.dfm} function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): Integer; stdcall; var CTRLID : Word; begin case nCode < HC_ACTION of True: Result := CallNextHookEx(hMouseHook,nCode,wParam,lParam); else CTRLID := GetDlgCtrlID(PMOUSEHOOKSTRUCT(lParam)^.hwnd); //if CTRLID <> 0 then begin SendMessage(Application.Handle,WM_MOUSEMOVE,wParam,lParam); end; Result := CallNextHookEx(hMouseHook,nCode,wParam,lParam); end; end; procedure TForm1.CMMouseEnter(var Message: TMessage); begin end; procedure TForm1.CMMouseLeave(var Message: TMessage); begin end; procedure TForm1.FormCreate(Sender: TObject); begin Self.Top := 0; hMouseHook := SetWindowsHookEx(WH_MOUSE,@MouseHookProc,0,GetCurrentThreadId()); end; procedure TForm1.WMNCHITTEST(var Message: TWMMouseMove); begin inherited; Label1.Caption := IntToStr(Message.XPos) + ' x ' + IntToStr(Message.YPos); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnhookWindowsHookEx(hMouseHook); end; procedure TForm1.WMMouseMove(var Message: TWMMouseMove); begin Label1.Caption := IntToStr(Message.XPos) + ' x ' + IntToStr(Message.YPos); end; end. |
Re: Probleme mit Hooks
Wie immer die Frage: Was passiert bzw. was passiert nicht? :roll:
|
Re: Probleme mit Hooks
er zeigt mir nur die MousePos an, wenn ich über dem Formular bin. Ich möchte aber auch alle anderen Positionen außerhalb meiner Anwendung. Und das zeigt er nicht an (in dem Label)
|
Re: Probleme mit Hooks
Ist der Hook in einer DLL?
|
Re: Probleme mit Hooks
nun ja ich bin der Meinung, dass systemweite Hooks nur durch .dll relaisiert werden können.
Vielleicht solltest du da nocheinmal ansetzen. [Edit]Mist zu langsam![/Edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 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