2009-04-11 15 views
13

मैं खिड़की को छिपाने के बिना, टास्कबार से किसी अन्य एप्लिकेशन की विंडो को छिपाने में सक्षम होना चाहता हूं। विशेष रूप से, मैं कई अलग-अलग वेब ब्राउज़र चलाना, दृश्यमान, Alt + Tab सूची में उपलब्ध होना चाहता हूं, लेकिन टास्कबार पर स्थान नहीं लेना चाहता हूं।एक और ऐप का टास्कबार बटन छुपाएं

(यदि कोई उत्सुक क्यों है: मैंने एक डैशबोर्ड ऐप लिखा है जो Vista के DwmRegister थंबनेल एपीआई का उपयोग करता है ताकि कई खिड़कियों के लाइव पूर्वावलोकन को एक बार में दिखाया जा सके - एक प्रकार की "तस्वीर में तस्वीर", यदि आप करेंगे। उस बिंदु पर, उन खिड़कियों के लिए टास्कबार बटन भी अनावश्यक लगता है।)

मुझे पता है कि WS_EX_TOOLWINDOW को शामिल करने के लिए अन्य विंडो की शैली को बदलना टास्कबार से छिपाएगा, और मैंने इसे पहले कोशिश की। लेकिन, जैसा कि अपेक्षित था, उसके कुछ दुष्प्रभाव थे जो मैं नहीं चाहता था: शीर्षक बार छोटा हो गया (सभी बुरा नहीं, मुझे लगता है) और न्यूनतम और अधिकतम बटन चला गया (अच्छा नहीं)। मुझे टास्कबार को परिवर्तन को पहचानने के लिए खिड़की को छिपाना और फिर से दिखाना पड़ा, जिसने आईई विंडोज़ में किए जाने पर कलाकृतियों को पुनर्निर्मित किया।

मेरा अगला विचार यह था कि, क्योंकि मालिकों के साथ खिड़कियां डिफ़ॉल्ट रूप से टास्कबार से छिपी हुई हैं, शायद मैं अन्य विंडो को मेरे स्वामित्व में बदल सकता हूं। लेकिन एमएसडीएन pretty clear है कि "[ए] एक स्वामित्व वाली खिड़की बनाने के लिए, एक आवेदन खिड़की के स्वामित्व को दूसरी विंडो में स्थानांतरित नहीं कर सकता है।"

मुझे this question मिला जो कि मेरे जैसा ही है, लेकिन यह विशेष रूप से आपकी प्रक्रिया से विंडोज़ के बारे में है, जहां आपके पास विंडो स्वामित्व पर पूर्ण नियंत्रण है।

क्या कोई टास्कबार बटन छुपाने के किसी अन्य तरीके से जानता है, जो किसी अन्य प्रक्रिया से विंडोज़ के लिए काम करेगा?


अद्यतन: Tormod मुझे ITaskbarList साथ सही रास्ते पर डाल दिया - यह बहुत अच्छा काम करता है। Pinvoke.net पृष्ठ में कुछ त्रुटियां थीं (गलत GUID, इंटरफ़ेस ऑर्डर के बजाय वर्णानुक्रमित तरीके से घोषित विधियां), लेकिन मैंने इसे संपादित किया, सुधार किए, और इसके उदाहरण को भी जोड़ा कि आईटास्कबारलिस्ट को इसके कोकलास के माध्यम से कैसे चालू किया जाए।

अद्यतन 2: आप DeleteTab का उपयोग करते हैं एक खिड़की के टास्कबार बटन को छिपाने के लिए, और फिर बनाने कि सक्रिय विंडो (के माध्यम से जैसे SetForegroundWindow या Alt + टैब), अपने टास्कबार बटन फिर से दिखाई देगा। टास्कबार बटन को छिपाने के लिए, मुझे टाइमर जोड़ना था और DeleteTab को कॉल करना था। जब तक आप खिड़की पर ध्यान केंद्रित नहीं करते हैं, तब तक आपको टास्कबार बटन को संक्षिप्त रूप से फिर से प्रकट नहीं होता है, यह अच्छी तरह से काम करता है।

उत्तर

6

MSDN से:

संस्करण 4.71 और बाद में shell32.dll की क्षमता टास्कबार की सामग्री को संशोधित करने के लिए कहते हैं। किसी एप्लिकेशन से, अब आप टास्कबार बटन जोड़, निकाल और सक्रिय कर सकते हैं। आइटम को सक्रिय करना विंडो को सक्रिय नहीं करता है; यह टास्कबार पर दबाए गए आइटम को दिखाता है।

टास्कबार संशोधन क्षमताओं को एक घटक ऑब्जेक्ट मॉडल (COM) ऑब्जेक्ट (CLSID_TaskbarList) में लागू किया गया है जो ITaskbarList इंटरफ़ेस (IID_ITaskbarList) का खुलासा करता है। ऑब्जेक्ट को प्रारंभ करने के लिए आपको ITaskbarList :: HrInit विधि को कॉल करना होगा। फिर आप टास्कबार की सामग्री को संशोधित करने के लिए ITaskbarList इंटरफ़ेस के तरीकों का उपयोग कर सकते हैं।

ऐसा लगता है जैसे COM interop टास्कबार की सामग्री को विश्वसनीय रूप से कुशलतापूर्वक उपयोग करने का तरीका है।विशेष रूप से, आप निम्नलिखित कार्य कॉल करने के लिए की आवश्यकता होगी:

आप pinvoke.net: ITaskbarList पर ITaskbarList इंटरफेस के लिए सी # हस्ताक्षर पा सकते हैं।

+0

मीठे - मुझे इस बारे में कभी नहीं पता था, लेकिन यह टिकट की तरह लगता है। धन्यवाद! –

0

क्या आपने WS_EX_APPWINDOW को हटाने का प्रयास किया है?

+0

हाँ, मैंने किया। यह केवल तभी काम करता है जब अन्य ऐप को पहले स्थान पर 'WS_EX_APPWINDOW' जोड़ना पड़ा, उदा। अगर उसके पास एक मालिक खिड़की थी। सामान्य शीर्ष-स्तरीय विंडो को 'WS_EX_APPWINDOW' की आवश्यकता नहीं है, इसलिए इसे निकालने के लिए नहीं है। –

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