ich wollte mal fragen, wenn ich jetzt ein NICHT-Systemweiten Hook habe, brauche ich den ja nicht in eine
DLL einbinden oder?
Funktioniert das, dass ich ein Hook in eine Komponente einbinde?
Ich habe es so probiert:
Delphi-Quellcode:
unit HintCheckBox;
interface
uses
SysUtils, Classes, Controls, StdCtrls, Messages, Windows, Graphics, ExtCtrls;
type
THintCheckBox =
class(TCheckBox)
private
{ Private-Deklarationen }
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
MouseHook : HHOOK;
Constructor Create(AOwner:TComponent);
override;
Destructor Destroy;
override;
published
{ Published-Deklarationen }
end;
function MouseProc(nCode : Integer; wParam: WPARAM; lParam : LPARAM): LRESULT;
stdcall;
{ ---------------------------------------------------------------------------- }
procedure Register;
{ ---------------------------------------------------------------------------- }
implementation
{ ---------------------------------------------------------------------------- }
procedure Register;
begin
RegisterComponents('
Beispiele', [THintCheckBox]);
end;
{ ---------------------------------------------------------------------------- }
{ THintCheckBox }
{ ---------------------------------------------------------------------------- }
function MouseProc(nCode : Integer; wParam: WPARAM; lParam : LPARAM): LRESULT;
stdcall;
begin
case nCode < HC_ACTION
of
True :
Result := CallNextHookEx(MouseHook, nCode, wParam, lParam);
else
//.....IRGENDWAS
Result := CallNextHookEx(MouseHook, nCode, wParam, lParam);
end;
end;
{ ---------------------------------------------------------------------------- }
constructor THintCheckBox.Create(AOwner: TComponent);
begin
inherited;
MouseHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, 0, GetCurrentThreadId());
end;
Nur leider kennt er die Variable MouseHook in der Funktion "MouseProc" nicht. Ist ja logisch aber wenn ich die Funktion selber mit in den PRIVATE-Teil schreibe dann meckert der Compiler bei folgender Zeile:
MouseHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, 0, GetCurrentThreadId());
Variable erwartet an der Stelle: @MouseProc
Ich hoffe ihr könnt mir helfen...
MFG Alex