WinEvents यहां जाने का तरीका है। आपको जिस एपीआई की आवश्यकता है वह SetWinEventHook() है - यदि आप किसी विशिष्ट विंडो की परवाह करते हैं, तो HWND के threadId प्राप्त करने के लिए GetWindowThreadProcessId() का उपयोग करें और फिर केवल उस विशिष्ट थ्रेड से ईवेंट सुनें। विंडो शीर्षक परिवर्तनों के लिए, आप EVENT_OBJECT_NAMECHANGE ईवेंट चाहते हैं।
आप या तो "संदर्भ में" या "संदर्भ से बाहर" हुक कर सकते हैं - बाद वाला सबसे आसान है, और इसका मतलब है कि ईवेंट को अपनी प्रक्रिया में वापस भेज दिया जाता है, इसलिए आपको एक अलग डीएलएल की आवश्यकता नहीं है - जो इसे बनाता है सी # में यह सब करने के लिए संभव है; लेकिन SetWinEventHook को कॉल करने वाले थ्रेड में संदेश लूप (GetMessage/TranslationMessage/DispatchMessage) होना चाहिए, क्योंकि ईवेंट दृश्यों के पीछे संदेशों के रूप में वितरित किए जाते हैं।
अपने विनइवेंट कॉलबैक में, आपको यह जांचना होगा कि एचडब्ल्यूएनडी वह है जिसे आप परवाह करते हैं, क्योंकि आपको उस लक्ष्य धागे पर किसी भी यूआई के लिए नाम परिवर्तन मिलेगा, संभवतः बाल विंडो नाम परिवर्तन, या अन्य चीजें आप परवाह नहीं है।
-
वैसे, आप जाँच कर सकते हैं WinEvents का उपयोग करता है कुछ नमूना सी # कोड के लिए this answer; यह डेस्कटॉप पर सभी विंडोज़ में अग्रभूमि विंडो परिवर्तनों को ट्रैक करने के लिए उनका उपयोग कर रहा है; लेकिन किसी विशिष्ट विंडो पर नाम परिवर्तनों को ट्रैक करने के लिए ऊपर उल्लिखित कुछ सरल संशोधन करना चाहिए।
क्या आप एक ब्राउज़र के साथ-साथ रीडायरेक्ट के बारे में बात कर रहे हैं ..? क्या आपने अनुरोध/प्रतिक्रिया और हेडर तक पहुंचने की खोज की है ?? बस उत्सुक है कि मैं आपके जैसा ही पृष्ठ पर हूं .. – MethodMan
हां, हुक आवश्यक है। बहुत यकीन है कि मैंने आपको पहले ही WH_SHELL के बारे में बताया है। –
संभावित डुप्लिकेट [विंडोज़ में बंद सभी विंडोज़ लॉग इन करें] (http://stackoverflow.com/questions/8648386/log-all-windows-that-are-closed-in-windows) –