वीसी ++ में, मैं विंडोज़ की सूची प्राप्त करने के लिए EnumWindows (...), GetWindow (...), और GetWindowLong() का उपयोग करता हूं और जांचता हूं कि विंडो शीर्ष विंडो (मालिक के रूप में कोई अन्य विंडो नहीं है), और क्या खिड़की दिखाई दे रही है (WS_VISIBLE)। हालांकि, हालांकि मेरा डेस्कटॉप केवल 5 खिड़कियां दिखा रहा है, यह EnumWindows मुझे 50 विंडोज़ दे रहा है, कितना हास्यास्पद है! यहां कोई भी विंडोज गीक कृपया मुझे स्पष्टीकरण में मदद करें ...EnumWindows मुझे अपेक्षा से अधिक विंडोज़ क्यों लौटाता है?
उत्तर
(Alt-टैब बॉक्स में या इसी तरह) टास्कबार में केवल खिड़कियों की सूची के लिए रास्ता MSDN ब्लॉग पर इस लेख में रेमंड द्वारा वर्णित है:
http://blogs.msdn.com/b/oldnewthing/archive/2007/10/08/5351207.aspx
और यह है कि क्या एक जांच करने के लिए सुपर समारोह है खिड़की ऑल्ट-टैब में दिखाया गया है:
BOOL IsAltTabWindow(HWND hwnd)
{
TITLEBARINFO ti;
HWND hwndTry, hwndWalk = NULL;
if(!IsWindowVisible(hwnd))
return FALSE;
hwndTry = GetAncestor(hwnd, GA_ROOTOWNER);
while(hwndTry != hwndWalk)
{
hwndWalk = hwndTry;
hwndTry = GetLastActivePopup(hwndWalk);
if(IsWindowVisible(hwndTry))
break;
}
if(hwndWalk != hwnd)
return FALSE;
// the following removes some task tray programs and "Program Manager"
ti.cbSize = sizeof(ti);
GetTitleBarInfo(hwnd, &ti);
if(ti.rgstate[0] & STATE_SYSTEM_INVISIBLE)
return FALSE;
// Tool windows should not be displayed either, these do not appear in the
// task bar.
if(GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW)
return FALSE;
return TRUE;
}
यहां स्रोत कोड के लिए श्रेय:
http://www.dfcd.net/projects/switcher/switcher.c
कोई भी जानता है कि यह फ़ंक्शन 'डब्लूएस_EX_TOOLWINDOW' और' WS_EX_APPWINDOW' रेमंड द्वारा उनके ब्लॉग पोस्ट में उल्लिखित विस्तारित शैली के मामलों पर क्यों विचार नहीं करता है? क्या 'STATE_SYSTEM_INVISIBLE' इसे कवर करता है या यह कार्य एक रेमंड का वर्णन करता है के साथ सटीक मिलान नहीं है? –
@adamsmith toolwindow शीर्ष विंडो नहीं है, यह टास्कबार या alt-tab मेनू में नहीं दिखाया जाएगा। क्योंकि टूलविंडो की मूल विंडो शून्य नहीं है – jondinham
सूची में टूल विंडो को निकालने के लिए एक अतिरिक्त सुधार है, जिसे भी नहीं दिखाया जाना चाहिए। जैसा कि @ डेविड हेफरनन ने दूसरे उत्तर में उल्लेख किया है, यह दस्तावेज [निम्नलिखित एमएसडीएन लेख में] है [http: //http//msdn.microsoft.com/en-us/library/aa969325.aspx)।मैंने चेक के साथ उपरोक्त कोड में सुधार किया है: 'अगर (GetWindowLong (hwnd, GWL_EXSTYLE) और WS_EX_TOOLWINDOW) वापसी गलत;' –
जिन विंडोों के बारे में आप बात कर रहे हैं, एक्स बटन और टाइटल बार आदि के साथ एकमात्र प्रकार की खिड़कियां नहीं हैं। बटन, ड्रॉपडाउन मेनू, लेबल, आइकन, टेक्स्ट बॉक्स, टास्क बार, और बस बाकी सब कुछ एक विंडो भी है । तो EnumWindows
वही कर रहा है जो इसे करना है: सभी शीर्ष स्तर की विंडो का आकलन करें।
हालांकि यह सच है, EnumWindows
केवल शीर्ष स्तर की विंडो को दर्शाता है। इसका मतलब है कि it won't enumerate any child windows:
EnumWindows समारोह बच्चे खिड़कियों की गणना नहीं करता है, कुछ उच्च-स्तरीय प्रणाली है कि WS_CHILD शैली है के स्वामित्व में खिड़कियों के अपवाद के साथ।
हालांकि, आपके डेस्कटॉप पर कई चीजें विंडोज़ भी हैं, न केवल "खिड़कियां" जिनके बारे में आप सोच रहे हैं।
तो असंबंधित "तथाकथित" खिड़कियों से छुटकारा पाने के लिए कोई विचार? मैं सिर्फ दृश्य विंडो की एक सूची चाहता हूं (एप्लिकेशन विंडोज़, संवाद नहीं, बटन नहीं, आदि) – jondinham
शायद आप केवल [विंडो जो टास्कबार में दिखाई देते हैं] (http: // http: //msdn.microsoft.com/en -US/पुस्तकालय/aa969325.aspx)। "शैल टास्कबार पर एक बटन बनाता है जब भी कोई एप्लिकेशन एक विंडो बनाता है जिसका स्वामित्व नहीं है। यह सुनिश्चित करने के लिए कि टास्कबार पर विंडो बटन रखा गया है, WS_EX_APPWINDOW विस्तारित शैली के साथ एक अनूठी विंडो बनाएं। विंडो बटन को होने से रोकने के लिए टास्कबार पर रखा गया है, WS_EX_TOOLWINDOW विस्तारित शैली के साथ अनूठी विंडो बनाएं। वैकल्पिक के रूप में, आप एक छिपी हुई विंडो बना सकते हैं और इस छिपी हुई विंडो को अपनी दृश्य विंडो के मालिक बना सकते हैं। " –
हाँ, मैं टास्कबार में दिखाई देने वाली विंडो की सूची चाहता हूं। मुझे पता है कि कैसे छिपाना है, अलग-अलग मोड में एक विंडो दिखाएं; लेकिन मुझे नहीं पता कि यह सूची कैसे प्राप्त करें – jondinham
- 1. ValidateUser और अधिक क्यों नहीं लौटाता है?
- 2. यह गिट उथला क्लोन मुझे अपेक्षा से बड़ा क्यों है?
- 3. मेरे यूनियन का आकार मुझे अपेक्षा से बड़ा क्यों है?
- 4. Thread.Sleep अधिक इंतजार कर रहा है पर अपेक्षा से अधिक
- 5. ISNUMERIC ('।') 1 क्यों लौटाता है?
- 6. क्या मुझे अपेक्षित अपेक्षा से अधिक URL को अस्वीकार कर देना चाहिए?
- 7. क्यों cout.tellp हमेशा -1 लौटाता है?
- 8. mysqli num_rows हमेशा 0 क्यों लौटाता है?
- 9. SecurityElement.IsValidText "&" पर सत्य लौटाता है ... क्यों?
- 10. GetFields() कुछ भी क्यों नहीं लौटाता है?
- 11. पाप() सही मूल्य क्यों नहीं लौटाता है?
- 12. मेरा रिकर्सिव फ़ंक्शन क्यों नहीं लौटाता है?
- 13. JSON XML से अधिक हल्का क्यों है?
- 14. DateTimeInfo.MonthNames एक 13 सदस्य क्यों लौटाता है?
- 15. 'फॉपेन' एक नल पॉइंटर क्यों लौटाता है?
- 16. क्यों "**" नकारात्मकता से अधिक कसकर बांधता है?
- 17. पायथन नकारात्मक सूची अनुक्रमणिका क्यों लौटाता है?
- 18. यह फ़ंक्शन दशमलव क्यों नहीं लौटाता है?
- 19. कैलेंडर.get (कैलेंडर.एमओएनटीएच) 0 क्यों लौटाता है?
- 20. जावा बिगडिमलल 1E + 1 क्यों लौटाता है?
- 21. ostream_iterator अपेक्षा के अनुसार क्यों काम नहीं करता है?
- 22. कैसे पता चलेगा कि EnumWindows विंडोज़ की अपनी सूची कब खत्म करता है?
- 23. ExpandoObject अपेक्षा के अनुसार क्यों काम नहीं करता है?
- 24. डेल्फी XE2 EnumWindows ठीक से काम नहीं कर रहे हैं
- 25. स्ट्रिंग concatenation सरणी से अधिक तेजी से क्यों शामिल है?
- 26. `ऐरे (0,1,2) == ऐरे (0,1,2)` अपेक्षित परिणाम क्यों नहीं लौटाता है?
- 27. प्रोग्रामेटिक रूप से चलाने पर ant.bat त्रुटि स्थिति क्यों नहीं लौटाता है?
- 28. Type.GetInterfaces() कभी-कभी वैध सूची क्यों नहीं लौटाता है?
- 29. कोको कभी-कभी खाली स्ट्रिंग क्यों लौटाता है?
- 30. नेट। X64 प्रक्रिया में मुझे 11GB से अधिक आवंटित स्मृति क्यों नहीं मिल सकती है?
मैं भी एक खिड़की ग देखा सहयोगी "स्टार्ट बटन" – jondinham
ऐसा इसलिए है क्योंकि स्टार्ट बटन एक विंडो है। –