2011-03-10 13 views
7

मैं एक खिड़की के सामने (अन्य आवेदन से) लाना चाहता हूं। वर्तमान में मैं इसका उपयोग कर रहा हूं:इसे सक्रिय किए बिना अन्य ऐप विंडो को सामने कैसे लाया जाए?

::SetWindowPos(hwnd, GetForegroundWindow(), 0, 0, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); 

यह ठीक काम करता है, लेकिन कुछ (अज्ञात मेरे लिए) मामलों में, यह विंडो हमेशा शीर्ष पर बनाता है। एमएसडीएन के अनुसार, मुझे GetForegroundWindow() के स्थान पर उपयोग करना चाहिए, लेकिन यह काम नहीं करता है- खिड़की अन्य (हमेशा शीर्ष पर नहीं) के नीचे रहता है।

मैं इसे सक्रिय किए बिना सामने की खिड़की कैसे ला सकता हूं?

+0

प्रलेखन का कहना है कि 'HWND_NOTOPMOST' "का कोई प्रभाव नहीं है यदि विंडो पहले से ही एक शीर्षतम विंडो है"। –

+0

यहां कुछ विकल्प: http://stackoverflow.com/questions/916259/win32-bring-a-window-to-top –

+0

* किसी अन्य प्रश्न के प्रस्तावित उत्तरों में से कोई भी एक अच्छा समाधान नहीं है। वह पूरा सवाल सिर्फ एक गड़बड़ है। डेविड को आपका जवाब यहां मिला। –

उत्तर

11

अन्य अनुप्रयोग की खिड़की अस्थायी रूप से 'सर्वोच्च' यह सक्रिय करने, पहले एक SetWindowPos कॉल में HWND_TOPMOST 'hWndInsertAfter' के रूप में निर्दिष्ट करने के द्वारा और उसके बाद दूसरी कॉल में HWND_NOTOPMOST निर्दिष्ट द्वारा बिना सामने में लाने के लिए (दोनों कॉल किया जा सकता है 'uFlags' में SWP_NOACTIVATE के साथ)। यदि किसी विंडो की शीर्ष-शैली की शैली को हटाने का जोखिम है जो ऑपरेशन के परिणामस्वरूप पहले से सबसे ज्यादा है, तो WS_EX_TOPMOST पूर्व-शैली का परीक्षण GetWindowLong[Ptr] पर कॉल के साथ पहले किया जा सकता है।

यदि कोई विशेष विंडो है जो अन्य एप्लिकेशन की खिड़की के सामने होने की आवश्यकता है (जैसा कि सभी विंडोज़ के सामने होने के विपरीत है), तो उस विंडो के मालिक को फिर से अस्थायी रूप से विंडो में सेट किया जा सकता है, इसे सामने की जरूरत है । GetWindowLong[Ptr]GWL_HWNDPARENT के साथ विंडो के मूल मालिक को स्टोर करने के लिए उपयोग किया जा सकता है, फिर अस्थायी स्वामी को सेट करने के लिए SetWindowLong[Ptr] पर कॉल करें, पर HWND_TOP के साथ कॉल करें और उसके बाद मूल मालिक को फिर से SetWindowLong[Ptr] पर पुनर्स्थापित करें।

+0

क्या यह काम करता है जब खिड़की में इनपुट फोकस नहीं होता है? –

+0

@ डेविड - हां, W7 पर परीक्षण किया गया, उदा। मैं इसे सक्रिय किए बिना शीर्ष पर 'नोटपैड' विंडो ला सकता हूं। –

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

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