2009-06-19 19 views
5

मैं नए इस समुदाय के लिए, मेरे स्वचालन स्क्रिप्ट की 1 मैं एक समस्या का सामना कर रहा हूँ के साथ काम करते हुए हूँ, मैं HWND के, निर्माण के समय प्राप्त करना चाहता था।HWND निर्माण का समय

मैं एक सरणी में HWND का एक सेट जो मैं FindWindowEx से लिया गया है, मैं सरणी में पता लगाने के लिए जो HWND प्रणाली समय पर निर्भर करता है पिछले बनाई गई है चाहते हो रहा है

मैं खिड़की हुक के लिए पर्याप्त जानकारी नहीं है , लेकिन मैंने कुछ सीबीटीप्रोक के बारे में पढ़ा है जिसमें "सीबीT_CREATEWND" नामक कुछ कार्यक्रम है जो समय खिड़की बनाने के बारे में एचडब्ल्यूएनडी वापस कर सकता है, मुझे खिड़की हुक के साथ काम करने के बारे में बहुत अनिश्चितता है, लेकिन अगर मुझे एचडब्ल्यूएनडी मिल जाएगी तो मैं चुन सकता हूं अप सिस्टम समय और मेरी सरणी के एचडब्ल्यूएनडी के साथ तुलना करें।

किसी को भी एक ही पर कुछ प्रकाश डाल कृपया कर सकते हैं, यह भी मुझे और अधिक विस्तार के लिए पूछना अगर मैं स्पष्ट नहीं कर रहा हूँ।

धन्यवाद, मनीष बंसल

उत्तर

5

विंडोज एक तरीका है कि एपीआई के माध्यम से पहुँचा जा सकता है, तो आप इसे अपने आप को इकट्ठा करने के लिए है इस जानकारी को संग्रहीत नहीं करता है।

यदि आप एचडब्ल्यूएनडी बनाने वाले कोड को संशोधित कर सकते हैं, तो आप WM_CREATE या WM_NCCREATE को संभालने के दौरान वर्तमान समय को स्टोर कर सकते हैं।

यदि संभव हो तो मैं विंडो हुक से बचूंगा - वे आपके डीएलएल को विंडोज़ बनाने वाली हर प्रक्रिया में इंजेक्ट करते हैं। आपके डीएलएल में एक महत्वपूर्ण बग आपके डेस्कटॉप पर हर ऐप को एक भयानक मौत मरने का कारण बन जाएगा।

आप विंडोज हुक के साथ करने के लिए जाना है, तो आप हुक इस तरह SetWindowsHookEx का उपयोग कर इंजेक्षन:

HHOOK myHook = SetWindowsHookEx(WH_CBT, MyHookFunction, myHookDll, 0); 

आपका हुक proc तो इस तरह दिखेगा:

LRESULT CALLBACK MyHookFunction(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if (nCode == HCBT_CREATEWND) 
    { 
     // wParam is new window. 
    } 
    else if (nCode == HCBT_DESTROYWND) 
    { 
     // wParam is window being destroyed 
    } 

    return CallNextHookEx(myHook, nCode, wParam, lParam); 
} 

हुक proc जरूरतों एक डीएलएल में उपस्थित होने के लिए, इसलिए इसे अन्य प्रक्रियाओं द्वारा लोड किया जा सकता है। चूंकि आपका हुक विभिन्न प्रक्रियाओं में चल रहा है, इसलिए आपको जानकारी को अपनी मूल प्रक्रिया में वापस मार्शल करना होगा। उदाहरण के लिए, आप एक कस्टम विंडो संदेश के माध्यम से ऐसा कर सकते हैं।

+1

[WinEvents] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx) अनुशंसित तरीका है। – IInspectable

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