2014-10-15 9 views
8

Sto cercando di capire se il cursore del mouse si trova sullo schermo del desktop. Ecco il mio codice:Come sapere se il cursore del mouse si trova sullo schermo del desktop?

[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(); 
    } 

ma non funziona. Quando il cursore del mouse si trova sul desktop, WindowFromPoint e GetDesktopWindow restituiscono valori diversi.

+5

La finestra del desktop potrebbe non essere quella che si pensa. La finestra del desktop è la finestra più in alto. Non è * la * finestra che * explorer * crea e che contiene icone, che immagino sia la finestra effettiva che stai cercando di determinare se il mouse è finito. –

+0

Forse questo sarà di aiuto: http://stackoverflow.com/questions/9222451/che-è-la differenza-differente-la-designtopesterno-e-openinputdesktop-apis-in – DonBoitnott

+1

Non penso sia corretto dire è il più alto (potrei sbagliarmi però). È più accurato dire che è il genitore di tutte le finestre. Ti consiglio di rompere Open Spy ++ e capire quale finestra WindowFromPoint ti sta dando e poi andare da lì. –

risposta

1

Ora con la mia idea è possibile risolvere il problema in questo modo:

Utilizzare questo metodo nel codice del modulo.

Quindi chiamare questo metodo in un evento e controllare il mouse sul desktop oppure no.

Problemi correlati