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 अलग-अलग मान लौटाता है।
फार्म के अपने कोड में इस पद्धति का उपयोग करें:
डेस्कटॉप विंडो ऐसा नहीं हो सकता है जो आपको लगता है। डेस्कटॉप विंडो सबसे ऊपर की खिड़की है। यह * विंडो * नहीं है * एक्सप्लोरर * बनाता है और जिसमें आइकन शामिल हैं, जो मुझे लगता है वह वास्तविक विंडो है जिसे आप निर्धारित करने की कोशिश कर रहे हैं कि माउस खत्म हो गया है या नहीं। –
शायद यह मदद करेगा: http://stackoverflow.com/questions/9222451/what-is-the-difference-between-the-getdesktopwindow-and-openinputdesktop-apis-in – DonBoitnott
मुझे नहीं लगता कि यह कहना सही है यह सबसे ऊपर है (हालांकि मैं गलत हो सकता है)। यह कहना अधिक सटीक है कि यह सभी खिड़कियों का अभिभावक है। मैं खुले जासूस ++ को तोड़ने की सलाह दूंगा और यह पता लगाऊंगा कि विंडोफ्रोपॉइंट आपको कौन सा विंडो दे रहा है और फिर वहां से जा रहा है। –