Position des Maus-Cursors unter WPF setzen
Heute bin ich auf das Problem gestoßen die Position des Cursors zu verändern, das bedeutet ich wollte meinen Cursor in der Mitte meines Canvas platzieren. Projektbedingt musste eine WPF Lösung her da ich kein WinForms einsetze. Nach einiger Recherche habe ich herausgefunden das es bisher keine richtige Möglichkeit gibt dies unter WPF zu tun. Dennoch gibt es dafür zwei alternative Lösungsansätze:
1.) Einbinden von unmanaged Code:
Über die Methode SetCursorPos in der user32.dll kann man mit Hilfe der Windows API die Mausposition setzen. Nachteil dabei ist aber das man nicht mehr Betriebssystemunabhängig bleibt. Das sollte aber bei den meisten kein Problem darstellen da Sie vermutlich unter Windows programmieren. So weit ich weiß ist bisher in Mono auch noch kein WPF implementiert. Folgendes Snippet bindet die genannte Funktion der DLL ein, danach kann die Methode SetCursorPos im Quellcode verwendet werden:
[DllImport("user32.dll")] internal extern static int SetCursorPos(int x ,int y );
2.) Einbinden von WinForms DLLs:
Die Zweite Möglichkeit besteht darin die System.Windows.Forms.dll bzw. System.Drawing.dll einzubinden. Dadurch steht einem die folgende Methode zur Verfügung:
System.Windows.Forms.Cursor.Position = new System.Drawing.Point(5, 10);
Der große Nachteil bei dieser Methode besteht allerdings darin, das die beiden DLLs relativ groß sind. Dieser Overhead wird lediglich wegen einer Methode verursacht.
Fazit:
Ich vermute das es in einer kommenden Erweiterung der WPF API eine passende Methode geben wird mit der es möglich ist die Mausposition zu setzen. Bis dahin empfehle ich die Variante eins bei der die Windows API zum setzen der Mausposition verwendet wird.