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:
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.
Vielleicht kennt sich ja jemand damit aus? Danke!