![]() |
Maus Hook für XButtons auswerten
Hallo, ich habe mir einen Maushook gebastelt um auch außerhalb meiner App auf die XButtons (diese zwei Knöpfe meist seitlich an einer Maus) reagieren zu können.
Reagieren funktioniert soweit aber ich finde leider keine Informationen wie ich den "mouseData" Inhalt vernünftig auswerten muss um zwischen den beiden Knöpfen unterscheiden zu können. Zur zeit mache ich es so wie hier, aber bin nicht davon überzeugt ob es korrekt ist.
Delphi-Quellcode:
Vielleicht kennt sich ja jemand damit aus? Danke!
TForm1 = class(TForm)
Label6: TLabel; procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormCreate(Sender: TObject); end; type TMSLLHOOKSTRUCT = record pt : TPoint; mouseData : DWORD; flags : DWORD; time : DWORD; dwExtraInfo : DWORD; end; function LowLevelMouseProc(nCode: LongInt; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var Form1: TForm1; mHook: HHOOK; implementation function LowLevelMouseProc(nCode: LongInt; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var Info : ^TMSLLHOOKSTRUCT absolute lParam; begin Result := CallNextHookEx(mHook, nCode, wParam, lParam); with Info^ do begin case wParam of WM_XBUTTONDOWN : if (mouseData > Succ(High(Word))) then Form1.Label6.Caption := 'WM_XBUTTONDOWN (up) pressed' else Form1.Label6.Caption := 'WM_XBUTTONDOWN (down) pressed'; WM_XBUTTONUP : if (mouseData > Succ(High(Word))) then Form1.Label6.Caption := 'WM_XBUTTONUP (up) pressed' else Form1.Label6.Caption := 'WM_XBUTTONUP (down) pressed'; end; end; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin UnhookWindowsHookEx(mHook); CanClose := True; end; procedure TForm1.FormCreate(Sender: TObject); const WH_MOUSE_LL = LongInt(14); begin mHook := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseProc, hInstance, 0); end; end. |
AW: Maus Hook für XButtons auswerten
steht doch eigentlich in der Hilfe, wie dieser Wert aufgebaut ist. :angle:
![]() |
AW: Maus Hook für XButtons auswerten
Zitat:
|
AW: Maus Hook für XButtons auswerten
Wenn man davon ausgeht, das immer irgendwo was schief gehen kann, dann sollte das
Code:
besser im FormDestroy erfolgen.
UnhookWindowsHookEx(mHook);
OnClose / OnCloseQuery ist dafür nicht das richtige Ereignis, da es nicht sichergestellt ist, das es immer aufgerufen wird. Aber wäre es nicht besser diesen Hook nur zu aktivieren, wenn das Form den Focus hat? Da wäre OnActivate / OnDeactivate das passende Ereignis. |
AW: Maus Hook für XButtons auswerten
Danke für den Destroy Hinweis! Hab auch mein Record gefixt. Nein, es geht um eine Art side-panel wo man Infos durchblättern kann auch wenn der Fokus weg ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 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