Laden...

Bei jedem Linksklick *.wav-Datei abspielen - Wie kann ich die Maus global abfragen?

Erstellt von bra10 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.051 Views
B
bra10 Themenstarter:in
27 Beiträge seit 2007
vor 6 Jahren
Bei jedem Linksklick *.wav-Datei abspielen - Wie kann ich die Maus global abfragen?

Vielleicht ist es ein etwas merkwürdiges Anliegen, aber ich möchte jedes Mal, wenn die linke Maustaste gedrückt wird eine kleine wav-Sounddatei abspielen egal wo sich der Mauszeiger auf dem Bildschirm befindet. Nun hätte ich die Möglichkeit, das in jeder einzelnen Mausklickabfrage meines Programmes zu implementieren. Das ist aber verdammt umständlich. Gibt es einen globalen/formübergreifenden Maushandler, an den ich mich ranhängen kann?

Vielen Dank,
bra10

2.079 Beiträge seit 2012
vor 6 Jahren

Soweit ich weiß, gibt's das nicht, Du brauchst dazu die WindowsMessages.
Die einfache Form kennst Du vielleicht in Form von der WndProc-Methode, denn die wird aufgerufen, wenn eine Message an deine Anwendung übermittelt wird. Das Problem an der WndProc-Methode ist, dass sie die Nachricht nur erhält, wenn sie auch den Fokus hat.
Du musst also "an WinForms vorbei" auf die WindowsMessages horchen. Dafür bietet Windows eine Möglichkeit an, sog. Hooks zu registrieren. Du registrierst also eine Methode, die Windows global für jede WindowsMessage aufruft und in der Du dann filtern (musst) und verschiedene Aktionen definieren kannst.

Bei mir ist das eine ganze Weile her, dass ich das mal gemacht habe, aber ich hab kurzfristig das gefunden:
https://stackoverflow.com/questions/11361811/capture-all-windows-messages
Ich glaub, das hab ich damals verwendet, das macht's etwas einfacher:
https://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H

Ein kleiner Tipp am Rande:
Pass sehr gut mit Breakpoints auf 😄
Ich hab mal die Maus-Bewegungen abgefangen um die wiederum auf einen Cursor in meiner Anwendung zu übertragen. Wenn ich nun einen Breakpoint gesetzt habe, hielt die Anwendung zwar an, aber auch meine Maus, denn Windows hat jede Maus-Bewegung an meine Anwendung gemeldet und auf eine Antwort gewartet, die natürlich nie kam, weil die Anwendung pausiert war. Windows hört allerdings irgendwann mit Warten auf, es ruckelt bloß ein paar Sekunden sehr stark, wird dann aber wieder besser.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.