![]() |
Rechte Maustaste unc CTRL Systemweit abfangen
Hallo Zusammen,
ich hab mal wieder ein kleines Problem. Ich habe mir gerade die Geschichte mit den Hooks ein wenig angeschaut, aber ich kommt auf keinen grünen Zweig. Ich kann zwar den Hook installieren und erstellen, aber jetzt kommt meine Frage. Wenn irgendwo (Systemweit) Die Ctrl Taste in Verbindung mit der rechten Mausstaste geklickt wird, dann brauch ich die aktuelle Mausposition. Wie fang ich Tastatur + Maushook ab und wie bekomme ich dann das Ergebnis in mein Programm (von der DLL). Bei Assabard war ich schon, versteh das ganze aber nicht ganz. Danke, Yves |
Re: Rechte Maustaste unc CTRL Systemweit abfangen
Hallo,
also das mit den Hooks hab ich doch halbwegs verstanden. Und ich denke auf dem Weg bin ich jetzt schon mal richitg. Ich habe jetzt versucht, als erstes Mal den Mausdruck zu empfangen. Dazu folgender Code: Ist in der Hook Dll abgelegt:
Delphi-Quellcode:
In meinem Programm starte ich jetzt den Hook. Und fange die Mausereignisse so ab:
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall; begin //es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen //it's possible to call CallNextHookEx conditional only. Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; //wenn code kleiner 0 wird nix gemacht //if code smaller 0 nothing has to be done FALSE: begin //Hier kann jetzt alles bearbeitet werden //Here one can work with the parameters PostMessage(WindowHandle, WM_MOUSEHOOKMSG, wParam, lParam); end; end; end;
Delphi-Quellcode:
Leider bekomme ich nur die Mausereignisse in meinem eigenen Programm und nicht Systemweit, ich hab doch eine DLL erstellt, ich habe das Gefühl das reicht nicht um es Systemweit zu machen!?
procedure TForm1.DllMessage(var Msg: TMessage);
begin // if (Msg.wParam <> WM_LBUTTONDOWN) or (Msg.wParam <> WM_LBUTTONUP) then exit; if Msg.wParam = WM_LBUTTONDOWN then Label1.Caption := ('Down') else if Msg.wParam = WM_LBUTTONUP then Label1.Caption := ('Up'); end; Yves |
Re: Rechte Maustaste unc CTRL Systemweit abfangen
Hallo,
hab jetz das Problem gelöst... Bei dem Tutorial von Assabard hab ich das nirgends geshen. Und zwar mach ich es mit FileMapping, dann funktioniert es Systemweit!
Delphi-Quellcode:
Warum geht das nur so?
if nCode = HC_ACTION then
begin FileMapObj := OpenFileMapping(FILE_MAP_READ, False,'CSHookMapFile'); if FileMapObj <> 0 then begin FileMapView := MapViewOfFile(FileMapObj, FILE_MAP_READ, 0, 0, 0); PostMessage(FileMapView^, WM_MOUSEHOOKMSG, wParam, lParam); UnmapViewOfFile(FileMapView); CloseHandle(FileMapObj); end; Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; Yves |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz