2012-03-05 7 views
5

मैं का उपयोग करें:मैं विंडोज 7 में स्टार्ट बटन पर हैंडल कैसे प्राप्त करूं?

Hwnd hStart = ::FindWindow ("Shell_TrayWnd",NULL); // get HWND of taskbar first 
hStart = ::FindWindowEx (hStart, NULL,"BUTTON", NULL); // get HWND of start button 

बटन के हैंडल शुरू मिलता है। यह विंडोज एक्सपी, पर ठीक से चल रहा है लेकिन विंडोज 7 में, ::FindWindowEx (hStart, NULL,"BUTTON", NULL) हमेशा 0 देता है, और GetLastError() रिटर्न 0 भी देता है।

वह क्यों है?

+2

मुझे लगता है विंडोज 7 पर प्रारंभ बटन नहीं रह वर्ग 'BUTTON' है कि के लिए है, लेकिन मैं गलत हो सकता है। आप जासूस ++ के साथ अब क्या देख सकते हैं, लेकिन मैं दृढ़ता से सलाह देता हूं कि आप स्टार्ट बटन जैसे मौलिक यूआई तत्वों के साथ गड़बड़ न करें। आप क्या हासिल करने का प्रयास कर रहे हैं? –

+5

यदि आप एक प्राप्त करते हैं तो भी स्टार्ट बटन हैंडल के साथ आप क्या करेंगे? – Gabe

+0

गेबे, मैं सिर्फ हुक के बारे में पढ़ रहा हूं। :) – Fish

उत्तर

7

विंडोज 7 में स्टार्ट बटन, जिसमें क्लास का नाम "Button" है, डेस्कटॉप विंडो का एक बच्चा है। आपका कोड मानता है कि स्टार्ट बटन "Shell_TrayWnd" नाम की विंडो का एक बच्चा है जो वास्तव में टास्कबार और स्टार्ट मेनू को XP पर लागू किया गया था।

विंडोज 7 के लिए आप कुछ इस तरह उपयोग करना चाहते हैं:

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", NULL); 

हालांकि मुझे लगता है कि यह सुनिश्चित करें कि आप सही बटन प्राप्त होने के लिए नाम से बेहतर खोज होगी।

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", "Start"); 

मुझे यकीन है कि कैसे Vista अपने टास्कबार को लागू करता है नहीं कर रहा हूँ और प्रारंभ मेनू, लेकिन आप पता लगाने के लिए जासूस का उपयोग कर सकते ++।

यह सब करने के बाद, यदि आप इस तरह के कार्यान्वयन विशिष्ट विवरण में चारों ओर पोक किए बिना अपने लक्ष्यों को प्राप्त करने का कोई तरीका ढूंढ सकते हैं तो यह बेहतर होगा।

+10

और यह न भूलें कि विंडोज 8 में सब कुछ पूरी तरह अलग होगा। –

+5

@ मार्क हाँ, अब घर साफ करने और ऐसे हैक्स को छोड़ने का एक उत्कृष्ट समय होगा –

+0

धन्यवाद! मैंने 'hWnd = :: FindWindow (" बटन "," स्टार्ट ") की कोशिश की है; ', यह विंडोज 7 में काम करता है, जबकि एक्सपी में यह सिर्फ शून्य लौटाता है। मुझे लगता है कि स्टार्ट बटन टास्कबार की एक बाल विंडो है एक्सपी, जबकि विंडोज 7 में यह एक स्वतंत्र खिड़की है। :) – Fish

-2

:: FindWindow (एल "Shell_TrayWnd", NULL);

इस कोड को पूरा टास्कबार

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