MousePosition Recorder

Blackhawk50000

Erfahrenes Mitglied
Hallo, ich brauche glaube ich nur eine Zeile Code.... vielleicht ein klein wenig mehr.

Ich will ein Programm schreiben, dass sich erst einem einem Fenster öffnet, da sol man auf Record klicken, und dann sollen so lange die Mouseposition gespeichert werden wenn man irgendwo klickt, bis man auf STOP klickt.

Dieses Programm soll dann wärend der Aufnahme im Hintergrund weiterlaufen und die mouseposition, egal wo geklickt wird, in eine Textdatei schreiben.


Das Schreiben ist nicht mein Problem, nur das Finden der Position und dann das Reagieren auf das Klicken!
 
Also mit einer Zeile wird das nicht getan sein.

Die Stichwörter sind hier "Mouse Hook". Schau dir mal diese zwei Links an:
  1. How to set a Windows hook in Visual C# .NET
  2. Processing Global Mouse and Keyboard Hooks in C#
Ich habe da mal eine Klasse in VB.Net für ein ähnliches Projekt geschrieben, siehe angehängte Datei. Allerdings war das nur für einen programmweiten Hook, nicht für einen Systemhook. Laut Aussage einer der oben genannten Seiten sollte man aber theoretisch aus einem lokalen einen globalen Hook machen können, in dem man die (in meinem Code verwendete) Variable WH_MOUSE=7 auf WH_MOUSE=14 ändert. Das hat bei mir aber nicht funktioniert und ich weiß nicht warum. Vielleicht hast du mehr Glück.

Die Klasse ist so zu verwenden, dass du lediglich das statische Event "Mouse" abonnierst. Sobald sich was an der Maus ändert, wird dann das Event ausgelöst. In der "Message"-Property des MouseEventArgs-Objekts steht dann, was nun eigentlich passiert ist. Das ist ein Integer-Wert der irgendwo in der MSDN dokumentiert ist ^^
Die Handle-Property würde dir das Handle zu dem Control geben, das sich gerade unter dem Mauszeiger befindet.

Wenn du dich beispielsweise für die linke Maustaste interessierst, dann sind die folgenden Message-Werte für dich interessant:
  • WM_LBUTTONDOWN = &H201 (linke Maustaste in einem Client-Bereich gedrückt)
  • WM_LBUTTONUP = &H202 (linke Maustaste in einem Client-Bereich losgelassen)
  • WM_NCLBUTTONDOWN = &HA1 (linke Maustaste in einem Non-Client-Bereich gedrückt)
  • WM_NCLBUTTONUP = &HA2 (linke Maustaste in einem Non-Client-Bereich losgelassen)
Analog findest du mit Google die Werte für die anderen Tasten.
Wie du siehst wird eine unterschiedliche Nachricht gesendet, je nach dem wo die Maus ihren Status geändert hat. Non-Client-Bereich wäre zum Beispiel der Rahmen oder die Titelleiste eines Fensters, Client-Bereich der Inhalt eines solchen Fensters.

Wenn jetzt eine DirectX-Anwendung im Vollbildmodus läuft habe ich keine Ahnung ob das Event dann immer noch ausgelöst wird bzw. welche "Message" dann kommt.
 

Anhänge

  • MouseHooks.zip
    3,1 KB · Aufrufe: 40
Zuletzt bearbeitet:
Zurück