Hallo,
ich habe einen kleinen Hook geschrieben für einen ColorPicker der auf
dem kompletten Desktop funktionieren soll.
Wenn ich den Hook starte klappt auch alles, nur beenden tut er sich nicht mehr,
wenn er es soll ... .
Hier mal der Code.
Delphi-Quellcode:
function MouseHookProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
var i: integer;
begin
Result := CallNextHookEx(MouseHook, Code, wParam, Longint(@EventStrut));
if Code < 0 then Exit;
// Hook beenden
if Code = HC_SYSMODALON then Exit;
if Code = HC_ACTION then
begin
if EventStrut.message = WM_LButtonDown then begin
MainFrm.Timer1.Enabled := false;
MainFrm.Button1.Enabled := true;
MainFrm.Panel2.Enabled := true;
MainFrm.Panel3.Enabled := true;
FhookStarted := false;
with MainFrm do
for i := 1 to 7 do
TShape(FindComponent('f'+IntToStr(i))).Cursor := crHandPoint;
UnhookWindowsHookEx(MouseHook);
end;
end;
end;
procedure StartHook;
var i: integer;
begin
if FHookStarted = false then begin
MouseHook := SetWindowsHookEx(WH_JOURNALRECORD, @MouseHookProc, hInstance, 0);
if MouseHook > 0 then begin
FHookStarted := True;
MainFrm.Timer1.Enabled := true;
MainFrm.Button1.Enabled := false;
MainFrm.Panel2.Enabled := false;
MainFrm.Panel3.Enabled := false;
with MainFrm do
for i := 1 to 7 do TShape(FindComponent('f'+IntToStr(i))).Cursor := crDefault;
end;
end;
end;
procedure MessageHook;
var Msg: tagMSG;
begin
if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then
MouseHook := SetWindowsHookEx(WH_JOURNALRECORD, @MouseHookProc, 0, 0);
end;
// Hook Starten
procedure TMainFrm.Button1Click(Sender: TObject);
begin
StartHook;
end;
Jemand eine Idee?