2014-10-15 5 views
8

मैं यह जानने की कोशिश कर रहा हूं कि माउस कर्सर डेस्कटॉप स्क्रीन पर है या नहीं। यहां मेरा कोड है:कैसे पता चले कि माउस कर्सर डेस्कटॉप स्क्रीन पर है या नहीं?

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

लेकिन यह काम नहीं करता है। जब माउस कर्सर डेस्कटॉप पर होता है, तो WindowFromPoint और GetDesktopWindow अलग-अलग मान लौटाता है।

फार्म के अपने कोड में इस पद्धति का उपयोग करें:

+5

डेस्कटॉप विंडो ऐसा नहीं हो सकता है जो आपको लगता है। डेस्कटॉप विंडो सबसे ऊपर की खिड़की है। यह * विंडो * नहीं है * एक्सप्लोरर * बनाता है और जिसमें आइकन शामिल हैं, जो मुझे लगता है वह वास्तविक विंडो है जिसे आप निर्धारित करने की कोशिश कर रहे हैं कि माउस खत्म हो गया है या नहीं। –

+0

शायद यह मदद करेगा: http://stackoverflow.com/questions/9222451/what-is-the-difference-between-the-getdesktopwindow-and-openinputdesktop-apis-in – DonBoitnott

+1

मुझे नहीं लगता कि यह कहना सही है यह सबसे ऊपर है (हालांकि मैं गलत हो सकता है)। यह कहना अधिक सटीक है कि यह सभी खिड़कियों का अभिभावक है। मैं खुले जासूस ++ को तोड़ने की सलाह दूंगा और यह पता लगाऊंगा कि विंडोफ्रोपॉइंट आपको कौन सा विंडो दे रहा है और फिर वहां से जा रहा है। –

उत्तर

1

अब मेरा विचार के साथ आप इस तरह अपनी समस्या को हल कर सकते हैं।

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; 
} 

फिर इस विधि को किसी ईवेंट में कॉल करें और डेस्कटॉप पर माउस जांचें या नहीं।

संबंधित मुद्दे