Ich versuche, Mausklicks von einem anderen Programm abzufangen. Ich mache ein Plugin für das Programm, das eine transparente Form auf dem Programm überlagert und zusätzliche Informationen anzeigt. Wenn ich auf den transparenten Teil des Formulars klicke, kann ich auf Dinge im Programm main
klicken. Ich möchte nicht, dass dies passiert (zumindest nicht jedes Mal - es gibt einige Bereiche, in denen Sie klicken dürfen und einige Bereiche, in denen Sie nicht sind, aber das ist nicht das Problem) .
Ich mache das jetzt mit WH_MOUSE_LL
, das funktioniert gut und ich kann den Mausklick davon abhalten, zum Programm zu kommen, indem ich einen Wert ungleich Null zurückgebe ( Ссылка ).
Das Problem ist, dass mein Hauptprogramm verzögert wird, ich brauche keine Benachrichtigungen für alle Mausbewegungen, ich möchte nur eine Benachrichtigung erhalten, wenn der Benutzer tatsächlich etwas angeklickt hat. Gibt es eine Möglichkeit, die WH_MOUSE_LL
so zu begrenzen, dass sie nur bei Mausklicks ausgelöst wird? (Die Verzögerung ist nicht auf Berechnungen in der MouseHookProc
-Methode zurückzuführen - sie tut derzeit nichts anderes als den Aufruf von CallNextHookEx(hHook, nCode, wParam, lParam)
.)
Ich habe versucht, das zu beheben, indem ich einen globalen Haken ( Ссылка ), die die Nachricht WM_MOUSEACTIVATE
hakt. Die Idee war, nur die WH_MOUSE_LL
zu verbinden, wenn ich eine WM_MOUSEACTIVATE
Benachrichtigung erhielt. Leider wird WH_MOUSE_LL
click notification vor WM_MOUSEACTIVATE
gesendet, damit dies nicht funktioniert.
BEARBEITEN:
@Nanda hier ist der proc-Code:
%Vor%Wie Sie sehen können, mache ich nicht viel mit ihm, aber es ist schon zu spät ...
@Cody Gray Ich habe einen sehr kleinen Test für das Formular gemacht, das die Nachrichten behandelt:
%Vor%Wenn Sie sagten: "zurückgeben, dass es transparent ist und es zu dem Fenster darunter geroutet lassen?" Kann ich dies tun, indem ich SendMessage benutze und grundsätzlich die Nachricht kopiere, die ich in meiner WndProc-Methode erhalte?
Um die Dinge komplizierter zu machen benutze ich auch dieses Formular Ссылка . Nach meinem Verständnis ermöglicht es mir, Bitmaps auf dem Formular zu zeichnen, die Anti-Aliasing vor dem Hintergrund sind. Mit dieser Form scheint es keine Möglichkeit zu geben, die Deckkraft einzustellen, da sie immer transparent ist. Gibt es eine bessere Möglichkeit, Bitmaps in einem Formular zu zeichnen?
Vielleicht möchten Sie in Easyhook ( Ссылка ) nachsehen, mit dem Sie Windows-API-Aufrufe von einem einzigen Prozess anstatt von für einen Hook haken können alle Prozesse.
Tags und Links .net c# winapi hook windows-messages