एक recent discussion on Meta के प्रकाश में शिकायत की कि इस तरह सवाल "ठीक से उत्तर नहीं" है, मैं कोशिश करते हैं और जवाब देने के इस एक एक बार आज़माएंगे लिए जा रहा हूँ। यह इंगित नहीं करना कि मुझे लगता है कि meklarian's answer वास्तव में, इससे भी बुरा है। लेकिन यह स्पष्ट रूप से असंतोषजनक समझा गया है, इसलिए शायद मैं कुछ अतिरिक्त विवरण भर सकता हूं।
आपकी समस्या वास्तव में डेस्कटॉप विंडो के बारे में काफी व्यापक भ्रम से परिणाम देती है। GetDesktopWindow
functionठीक जो इसे करने के लिए प्रलेखित किया गया है: यह डेस्कटॉप विंडो में एक हैंडल देता है। हालांकि, यह वही विंडो नहीं है जिसमें डेस्कटॉप आइकन शामिल हैं। यह एक पूरी तरह से अलग खिड़की है जो विंडोज 95 में पहली बार दिखाई दी। यह वास्तव में ListView
नियंत्रण "बड़े आइकन" दृश्य पर सेट है, वास्तविक डेस्कटॉप विंडो के माता-पिता के रूप में।
रेमंड चेन, विंडोज शेल टीम पर एक डेवलपर निम्न विंडोज गोपनीय लेख में कुछ अतिरिक्त विस्तार प्रदान करता है: Leftovers from Windows 3.0
[। । ।] विंडोज 3.0 में, डेस्कटॉप पर आइकन विंडोज 95 में कम से कम विंडोज़ का प्रतिनिधित्व करते थे, डेस्कटॉप ने आइकन कंटेनर के रूप में काम किया था।
विंडोज 95 डेस्कटॉप वास्तव में एक्सप्लोरर द्वारा बनाई गई एक विंडो थी जो आपकी स्क्रीन को कवर करती थी (लेकिन आपके डेस्कटॉप पर अन्य सभी विंडोज़ के नीचे बैठी थी)। वह खिड़की थी जो आपके आइकनों को प्रदर्शित करती थी। उसमें एक खिड़की प्रबंधक डेस्कटॉप विंडो अभी भी थी (यदि आप GetDesktopWindow को कॉल करते हैं तो विंडो आपको मिलती है), लेकिन आपने इसे कभी नहीं देखा क्योंकि यह विंडोज 95 डेस्कटॉप द्वारा कवर किया गया था-वैसे ही मेरे सहयोगी के घर के तहखाने में लकड़ी पैनलिंग दीवार के पीछे मूल दीवार और समय कैप्सूल कवर किया।
[। । ।]
यह डेस्कटॉप डिज़ाइन विंडोज 95 में इसकी शुरुआत के बाद से काफी हद तक अपरिवर्तित रहा है। एक सामान्य मशीन पर, मूल डेस्कटॉप अभी भी वहां है, लेकिन यह पूरी तरह एक्सप्लोरर डेस्कटॉप द्वारा कवर किया गया है।
सारांश में, तो, खिड़की GetDesktopWindow
समारोह से वापस लौटे वास्तविक डेस्कटॉप खिड़की, केवल एक ही हम जिस तरह से Windows 3.0 में वापस आ गया था। एक्सप्लोरर डेस्कटॉप (जिसमें आपके सभी आइकॉन हैं) डेस्कटॉप विंडो के शीर्ष पर बैठे एक और विंडो है (हालांकि वह जो पूरी तरह से मूल को कवर करता है) जिसे विंडोज 95 तक जोड़ा नहीं गया था।
यदि आप प्राप्त करना चाहते हैं एक्सप्लोरर डेस्कटॉप विंडो के लिए एक हैंडल, आपको GetDesktopWindow
फ़ंक्शन को कॉल करने से परे कुछ अतिरिक्त कार्य करने की आवश्यकता है। विशेष रूप से, आपको एक्सप्लोरर आइकन प्रदर्शित करने के लिए उपयोग किए जाने वाले एक को खोजने के लिए वास्तविक डेस्कटॉप विंडो की बाल विंडो को पार करने की आवश्यकता है। प्रत्येक विंडो को पदानुक्रम में प्राप्त करने के लिए FindWindowEx
function पर कॉल करके ऐसा करें जब तक आप इच्छित व्यक्ति तक नहीं पहुंच जाते। इसमें SysListView32
का वर्ग नाम है। आप शायद GetShellWindow
function का उपयोग करना चाहेंगे, जो आपको प्रारंभ करने में सहायता के लिए शैल की डेस्कटॉप विंडो में एक हैंडल देता है।
कोड इस प्रकार दिखाई देंगे (चेतावनी: इस कोड अपरीक्षित है, और मैं वैसे भी इसे प्रयोग की अनुशंसा नहीं करते):
HWND hShellWnd = GetShellWindow();
HWND hDefView = FindWindowEx(hShellWnd, NULL, _T("SHELLDLL_DefView"), NULL);
HWND folderView = FindWindowEx(hDefView, NULL, _T("SysListView32"), NULL);
return folderView;
मैं ने बताया कि कि मैं वास्तव में सलाह नहीं देते उस कोड का उपयोग कर। क्यों नहीं? क्योंकि लगभग हर मामले में आप डेस्कटॉप विंडो (या तो वास्तविक डेस्कटॉप विंडो, या एक्सप्लोरर डेस्कटॉप) पर हैंडल प्राप्त करना चाहते हैं, आप कुछ गलत कर रहे हैं।
ऐसा नहीं है कि आप डेस्कटॉप विंडो से कैसे बातचीत कर रहे हैं। असल में, आपको वास्तव में इसके साथ बातचीत करने की ज़रूरत नहीं है! याद रखें कि जब आप एक बच्चे थे तो आपने सीखा कि आपको उन चीज़ों के साथ खेलना नहीं है जो उनकी अनुमति के बिना अन्य लोगों से संबंधित हैं? खैर, डेस्कटॉप विंडोज से संबंधित है (अधिक विशेष रूप से, शैल के लिए), और इसने आपको अपने खिलौनों के साथ खेलने की अनुमति नहीं दी है! और किसी भी अच्छे बच्चे की तरह, शेल बिना किसी पूछे खिलौनों के साथ खेलने का प्रयास करते समय फिट फेंकने के अधीन है।
ही रेमंड चेन ने अपने ब्लॉग पर एक अन्य लेख एक बहुत ही विशेष मामले का विवरण है कि, What's so special about the desktop window?
उदाहरण वह देता परे हकदार प्रकाशित किया है, इस तरीके को बुनियादी यूआई स्वचालन करने के लिए नहीं है। यह बहुत ही नाजुक, बहुत ही समस्याग्रस्त है, और विंडोज के भविष्य के संस्करणों पर तोड़ने के विषय में भी है। इसके बजाए, परिभाषित करें कि आप वास्तव में क्या करने की कोशिश कर रहे हैं, और फिर उस फ़ंक्शन की खोज करें जो आपको ऐसा करने में सक्षम बनाता है।
यदि ऐसा कोई फ़ंक्शन मौजूद नहीं है, तो सीखने के लिए सबक यह नहीं है कि माइक्रोसॉफ्ट बस डेवलपर्स के लिए जीवन कठिन बनाना चाहता है। लेकिन इसके बजाय आप को पहले स्थान पर नहीं कर रहे हैं।
हो सकता है कि आप इसे संभालने के बाद आप हैंडल के साथ क्या करना चाहते हैं, इस बारे में अधिक जानकारी के साथ प्रश्न को संपादित कर सकते हैं? –
ध्यान दें कि XP / Vista/7 डेस्कटॉप पर ऑब्जेक्ट्स फ़ाइलें नहीं हैं। उदाहरण के लिए, "माई कंप्यूटर" और "रीसायकल बिन" पाए जाने वाले सामान्य ऑब्जेक्ट्स हैं। वे अपने पीआईडीएल द्वारा जाना जाता है। एक पीआईडीएल एक फ़ाइल नाम का एक सामान्यीकरण है। इसलिए आप चयनित पीआईडीएल में रुचि रखते हैं। – MSalters
इसलिए यदि मैं एक दस्तावेज़ की प्रतिलिपि बनाता हूं जैसे "Question.doc" (एक शब्द दस्तावेज़) क्या मुझे इसके लिए पीआईडीएल प्राप्त करने की आवश्यकता है, या क्या मैं इसे फ़ाइल के रूप में प्राप्त करता हूं। –