Delphi 4: MouseButtonClick verarbeiten

Hallo Delphianer,

wie kann man in einer D4-Anwendung einen MouseButtonClick registrieren, egal an welchem Punkt auf dem Screen (auch außerhalb der Anwendung) sich dieser ereignet?

Manfred

Hi Manfred,

innerhalb Deiner Anwendung einen Mausklick abzufangen ist relativ einfach. Du mußt einen eigenen MessageHandler für die Windows-Message WM_LBUTTONDOWN bzw. WM_RBUTTONDOWN schreiben.

Die Deklaration sieht so aus:

procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;

die Implementation so:

procedure TForm1.WMLButtonDown(var Msg: TWMLButtonDown);
begin
// Machwas…
end;


Um einen Mausklick auf dem gesamten Bildschirm zu erfassen, mußt Du einen sgn. Hook registrieren, um die entsprechende Benachrichtigung vom System zu bekommen. Nähere Erklärungen dazu findest Du bei der API-Hilfe zu „SetWindowsHookEx“. Dazu brauchst Du wieder eine eigene Behandlungsprozedur, die wie hier „HookProc“ deklariert sein muß:

uses Wintypes,Winprocs,Messages;

function SetHook:Boolean;
function UnHookHook:Boolean;
function HookProc(Code:integer; wParam: Word; lParam: Longint): Longint;

var HookedAlready: Boolean;

implementation

var
ourHook: HHook;

function SetHook: Boolean;
begin
if HookedAlready then exit;
ourHook := SetWindowsHookEx(WH_MOUSE,HookProc,HInstance,0);
HookedAlready:=True;
end;

function UnHookHook: Boolean;
begin
UnHookWindowsHookEx(ourHook);
HookedAlready := False;
end;

function HookProc(Code:integer; wParam: Word; lParam: Longint): Longint;
begin
if (wParam = WM_LBUTTONDOWN) then MessageBeep(0);
Result := CallNextHookEx(ourHook,Code,wParam,lParam);
end;

Thomas

Vielen Dank Thomas

Manfred