Ich habe gerade wieder etwas mit der Mouse+Keyboard-Hook-
DLL probiert.
Kann man das auch irgendwie so machen, dass auf die Hook-Message mit "0" geantwortet wird, wenn das Mausereignis gelöscht werden soll?
Delphi-Quellcode:
procedure TForm1.WndProc(var Message:TMessage);
var
difference: DWORD;
begin
if Message.Msg = WM_KEYBHOOKMSG then
begin
inherited WndProc(Message);
// Eine Taste wurde gedrückt, wir merken uns den Zeitpunkt
last_keyboard_input := GetTickCount();
// ToDo: Tasten wie Strg dürfen nicht mitgezählt werden,
// da diese in Kombination mit der Maustaste OK sind!
end
else if Message.Msg = WM_MOUSEHOOKMSG then
begin
difference := GetTickCount() - last_keyboard_input;
if (difference <= sperrdauer) and
((Message.wParam = WM_LBUTTONDBLCLK) or
(Message.wParam = WM_LBUTTONDOWN) or
(Message.wParam = WM_LBUTTONUP)) then
begin
// Ereignis verwerfen, da linke Maustaste innerhalb
// der Sperrzeit gedrückt wurde
// Something ToDo ?
Message.Result := 0;
// Debug: Zeigen, dass etwas gesperrt wurde
label2.Caption := 'Sperrung: ' + IntToStr(GetTickCount());
end
else
begin
// Sonstiges Mausereignis bzw. Mausklick außerhalb
// der Sperrzeit erlauben
inherited WndProc(Message);
end;
end
else
begin
// Andere Ereignisse durchlassen
inherited WndProc(Message);
end;
end;
In der
DLL:
Delphi-Quellcode:
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(Mouse_HookHandle, nCode, wParam, lParam);
case nCode < 0 of
TRUE: exit;
FALSE:
begin
setprop(WindowHandle, 'mous_ncode', nCode);
setprop(WindowHandle, 'mous_hwnd', PMOUSEHOOKSTRUCT(lParam)^.hwnd);
setprop(WindowHandle, 'mous_hitt', PMOUSEHOOKSTRUCT(lParam)^.wHitTestCode);
setprop(WindowHandle, 'mous_xpos', PMOUSEHOOKSTRUCT(lParam)^.pt.x);
setprop(WindowHandle, 'mous_ypos', PMOUSEHOOKSTRUCT(lParam)^.pt.y);
if SendMessage(HWND_BROADCAST, WM_MOUSEHOOKMSG, wParam, lParam) = 0 then
begin
result := WM_NULL; // Funktioniert das?
end;
end;
end;
end;
Würde soetwas funktionieren oder ist es der falsche Weg? Ich komme mit der Windows
API einfach nicht klar...