2011-05-03 21 views
6

मुझे पता है कि GetForegroundWindow फ़ंक्शन का उपयोग करके मैं वर्तमान सक्रिय विंडो हैंडल प्राप्त कर सकता हूं, लेकिन अब i want to detect when the active window (of any application) changes (become active)। मेरे दिमाग में आने वाला पहला समाधानपता लगाएं कि फोरग्राउंड विंडो

  1. GetForegroundWindow फ़ंक्शन द्वारा लौटाए गए वर्तमान मूल्य (हैंडल) को संग्रहीत करता है।
  2. टाइमर घटक का उपयोग करके फिर से GetForegroundWindow द्वारा लौटाए गए मान को जांचें और पुराने मान के साथ तुलना करें।

मैं सोच रहा हूं कि ऐसा करने के लिए एक बेहतर तरीका मौजूद है या नहीं, शायद एक विंडोज संदेश या कुछ और।

+0

मुझे याद है एक चाल Windows 3.x में एक खिड़की के लिए संदेश कतार पर में सुनने के लिए नहीं था, यकीन नहीं करता है, तो है कि चाल अभी भी Win32 – Johan

+2

पर काम करता है मुझे आशा है कि आप सुनिश्चित करें कि आपके खिड़की हमेशा होता है बनाने के लिए कोशिश नहीं कर रहे हर दूसरी खिड़की के शीर्ष पर। http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx –

+0

@Jim चिंता न करें, मैं ऐसा नहीं कर रहा हूं। – Salvador

उत्तर

7

सीबीटी हुक स्थापित करने के लिए SetWindowsHookEx का उपयोग करें। MSDN का वर्णन करता है callback function प्रदान करेंगे:

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

जिन कॉलों में आप रुचि रखते हैं वे हैं वे पहले पैरामीटर HCBT_Activate हैं। wParam पैरामीटर आपको विंडो हैंडल बताएगा।

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