![]() |
Mousehook: gedrückter Mbutton->keine Nachr. an Prog.
Ich habe einen Maushook installiert der meinem Programm eine Nachricht schickt, wenn die sich die Maus bewegt. Der Hook verhindert auch, dass andere Programme noch eine Mausnachricht empfangen können (Grund: ich will auf den Desktop zeichnen).
Das klappt auch alles Wunderbar bei ungedrückter Maustaste. Doch wenn ich in irgendeinem Fenster eine Maustaste drücke und gedrückt halte, wird meinem Programm nur noch so lange eine Nachricht gescickt, wie die Maus sich über diesem Fenster befindet. Wenn sie über die Fenstergrenze hinausbewegt wird, kommt bei meinem Prog nix mehr an, erst wieder, wenn sie sich wieder über dem Fenster befindet. Woran liegt das, und wie kann ich das beheben? Der Maushook:
Delphi-Quellcode:
library mousehook;
uses Windows, Messages; const WM_HOOKMAP = WM_USER + $0400; var HookHandle : HHook; FileMapObj : THandle; FileMapView : ^Integer; function MouseHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin if code = HC_ACTION then begin FileMapObj := OpenFileMapping(FILE_MAP_READ, False,'MouseHookMapFile'); if FileMapObj <> 0 then begin FileMapView := MapViewOfFile(FileMapObj, FILE_MAP_READ, 0, 0, 0); PostMessage(FileMapView^, WM_HOOKMAP, wParam, lParam); UnmapViewOfFile(FileMapView); CloseHandle(FileMapObj); end; end; {Das auskommentieren sorgt dafür, dass niemand anderes Mausnachrichten bekommen kann (ich weiß, ist vielleicht nicht das sauberste, aber es funktioniert wenigstens} //Result := CallNextHookEx(HookHandle, Code, wParam, lParam); end; procedure InstallMouseHook; stdcall; begin HookHandle := SetWindowsHookEx(WH_MOUSE, @MouseHookProc, hInstance , 0); end; procedure UninstallMouseHook; stdcall; begin UnhookWindowsHookEx(HookHandle); end; exports InstallMouseHook, UninstallMouseHook; begin end. |
Re: Mousehook: gedrückter Mbutton->keine Nachr. an Prog.
Wie mich Assarbad aufklärte:
Zitat:
Doch habe ich mein Problem nun viel einfacher lösen können (Dank an obbschtkuche): Ich weite die Form auf den ganzen Bildschirm aus und verhindere mit Brush.Style := bsClear, dass sie gezeichnet wird. Trotzdem kann sie Nachrichten empfangen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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