2014-10-15 7 views
8

Ich versuche zu bekommen, ob der Mauszeiger über dem Desktop-Bildschirm ist. Hier ist mein Code:Wie erkennen Sie, ob sich der Mauszeiger über dem Desktop befindet?

[DllImport("user32.dll")] 
    public static extern bool GetCursorPos(out Point lpPoint); 

    [DllImport("user32.dll")] 
    public static extern IntPtr WindowFromPoint(Point Point); 

    [DllImport("user32.dll", SetLastError = false)] 
    public static extern IntPtr GetDesktopWindow(); 

    public static bool IsMouseOverDesktop() 
    { 
     Point mouseCursor; 
     GetCursorPos(out mouseCursor); 
     return WindowFromPoint(mouseCursor) == GetDesktopWindow(); 
    } 

aber es funktioniert nicht. Wenn sich der Mauszeiger über dem Desktop befindet, geben WindowFromPoint und GetDesktopWindow unterschiedliche Werte zurück.

+5

Das Desktop-Fenster ist möglicherweise nicht das, was Sie denken, dass es ist. Das Desktop-Fenster ist das oberste Fenster. Es ist * nicht * das Fenster, das * explorer * erstellt und das Icons enthält, was vermutlich das Fenster ist, das du ermitteln willst, wenn die Maus vorbei ist. –

+0

Vielleicht hilft das: http://stackoverflow.com/questions/9222451/what-is-the-difference-between-the-getdesktopwindow-and-openinputdesktop-apis-in – DonBoitnott

+1

Ich glaube nicht, dass es richtig ist zu sagen es ist das oberste (ich könnte aber auch falsch liegen). Es ist genauer zu sagen, dass es das Eltern aller Fenster ist. Ich würde empfehlen spy ++ zu öffnen und herauszufinden, welches Fenster WindowFromPoint Ihnen gibt und dann von dort aus geht. –

Antwort

1

Jetzt mit meiner Idee können Sie Ihr Problem wie dieses lösen:

Verwenden Sie diese Methode in Ihrem Code der Form.

public bool IsMouseOverDesktop() 
{ 
bool IsMouseOverDesktop = false; 
if ((Cursor.Position.X > this.Location.X) && ((Cursor.Position.X - this.Location.X) < this.Width) && (Cursor.Position.Y > this.Location.Y) && ((Cursor.Position.Y - this.Location.Y) < this.Height)) 
    IsMouseOverDesktop = false; 
else 
    IsMouseOverDesktop = true; 
return IsMouseOverDesktop; 
} 

Dann rufen Sie diese Methode in einem Ereignis und überprüfen Sie die Maus über den Desktop oder nicht.

Verwandte Themen