2009-01-21 13 views
17

Win32 API का उपयोग करना (सी में, लेकिन यह अपरिहार्य है) मैं कैसे बता सकता हूं कि दी गई विंडो (एचडब्ल्यूएनडी द्वारा पहचाना गया) पर ध्यान केंद्रित किया गया है या नहीं? मैं एक घटना के लिए देख रहे एक आवेदन को जोड़ रहा हूं, और जब वह घटना होती है तो मैं यह जांचना चाहता हूं कि एप्लिकेशन पहले से ही ध्यान केंद्रित कर रहा है या नहीं। यदि ऐसा नहीं होता है, तो मैं खिड़की को तब तक फ्लैश करना चाहता हूं जब तक कि वे इसे फोकस न दें।मैं कैसे बता सकता हूं कि खिड़की पर ध्यान केंद्रित किया गया है या नहीं? (Win32 API)

वैकल्पिक रूप से, FlashWindowEx संरचना ध्वज FLASHW_TIMERNOFG करता है जो तब तक चमकता है जब खिड़की पर ध्यान केंद्रित नहीं किया जाता है, अगर खिड़की पहले से ही फोकस कर रही है? मैं अब इसका परीक्षण नहीं कर सकता क्योंकि मैं अपने विकास के माहौल में नहीं हूं, लेकिन मैं इस धारणा के तहत था कि यह किसी भी तरह से फ्लैश करेगा, जो मैं टालने की कोशिश कर रहा हूं।

संपादित करें: इसके अलावा, यदि यह महत्वपूर्ण है, तो एप्लिकेशन इस विंडो में डायरेक्टएक्स का उपयोग करता है।

+0

क्या आप पूछना चाहते हैं, "क्या इस विंडो में फोकस है", या "क्या इस एप्लिकेशन की किसी भी विंडो पर फोकस है"? – ChrisW

+0

मैंने नीचे एक टिप्पणी में नोट किया कि इस एप्लिकेशन में केवल एक विंडो होगी। –

उत्तर

23

GetActiveWindow इनपुट फोकस से जुड़े शीर्ष-स्तर विंडो लौटाएगा। GetFocus उस विंडो के हैंडल को वापस कर देगा जिसमें इनपुट फोकस है।

यह लेख मदद कर सकता है:
http://www.microsoft.com/msj/0397/Win32/Win320397.aspx

+0

वह उपयोगिता शानदार है! –

+0

लिंक अब इसके दिखाए गए स्थान पर उपलब्ध नहीं है, लेकिन संग्रहीत के रूप में उपलब्ध है: [web.archive.org/web/200308 ](https://web.archive.org/web/20030807084141/http://www। microsoft.com/msj/0397/Win32/Win320397.aspx) – Sabuncu

7

क्या आपका वास्तव में "फोकस" का मतलब है या आपका मतलब "सक्रिय" है?

एक विंडो में फोकस है - वह जो कुंजीपटल ईवेंट प्राप्त करने के लिए पहले पंक्ति में है। बाहरी खिड़की (जो उपयोगकर्ता स्क्रीन के चारों ओर खींच सकता है) "सक्रिय" है यदि उसके उपविंडों में से कोई एक फोकस है, लेकिन हो सकता है कि यह स्वयं पर ध्यान केंद्रित न हो या हो।

+1

एप्लिकेशन में केवल एक विंडो होगी, कोई सब-विंडोज या चाइल्ड विंडो नहीं होगी। –

13

gkrogers GetActiveWindow के उत्तरों के अलावा, आप भी एक बूलियन चर खिड़की आप को पता है अगर यह WM_SETFOCUS और WM_KILLFOCUS घटनाओं को फँसाने द्वारा ध्यान केंद्रित किया है या नहीं चाहते हैं के लिए बनाए रख सकते हैं, या WM_ACTIVATE

WndProc() .. 
case WM_SETFOCUS: 
    puts("Got the focus") ; 
    break ; 

case WM_KILLFOCUS: 
    puts("Lost the focus") ; 
    break; 

case WM_ACTIVATE: 
    if(LOWORD(wparam) == WA_ACTIVE) 
    puts("MEGAZORD ACTIVATED kew kew kew (flashy-eyes)") ; 
    else 
    puts("I AM NOW INACTIVE.") ; 
    break ; 
+0

उदाहरण से प्यार करें। – Xcalibur37

4

उपयोग GetForegroundWindow समारोह HWND कि आप अभी ध्यान केंद्रित कर रहे हैं पाने के लिए। फिर आपको इसे अपने आवेदन की खिड़की से तुलना करने की आवश्यकता है ताकि यह जांच सके कि इसमें फोकस है या नहीं।

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

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