2008-08-06 14 views
34

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

Win32 API का उपयोग करके इस बारे में जाने का सबसे अच्छा तरीका क्या है? मैंने SetForeground() को आजमाया है लेकिन यह हमेशा फोकस चुराता है और लगातार काम नहीं करता है।

इस बारे में जाने का सबसे अच्छा तरीका क्या है? कोई विचार?

उत्तर

14

SetForegroundWindow को फोकस चोरी करना चाहिए और कुछ ऐसे मामले हैं जहां यह असफल हो जाएगा।

SetForegroundWindow फ़ंक्शन उस थ्रेड को रखता है जो निर्दिष्ट विंडो को अग्रभूमि में बनाता है और विंडो को सक्रिय करता है। कीबोर्ड इनपुट को विंडो

कॉल करने से पहले SetCapture के साथ फ़ोकस कैप्चर करने का प्रयास करें। खिड़की को सामने लाने के विभिन्न तरीकों को भी देखें: SetForeGroundWindow, SetActiveWindow, यहां तक ​​कि माउस क्लिक को सिमुलेट करने से यह भी हो सकता है।

2

आप ब्रिंगविंडो टोटो टॉप फ़ंक्शन को फ़ोकस चोरी न करने का प्रयास कर सकते हैं। मैंने इसका इस्तेमाल नहीं किया है, लेकिन ऐसा लगता है कि आप क्या खोज रहे हैं।

5

SetForeGroundWindow, SetActiveWindow, और BringWindowToTop के बीच क्या अंतर है? ऐसा प्रतीत होता है जैसे वे सभी एक ही काम करते हैं।

एमएसडीएन के मुताबिक, SetForeGroundWindow खिड़की को सक्रिय करेगा और सीधे कीबोर्ड फोकस करेगा। जब आपकी प्रक्रिया पृष्ठभूमि में होती है तब भी यह काम करने का प्रयास करती है। SetActiveWindow SetForeGroundWindow जैसा ही काम करता है, लेकिन यदि आपका एप्लिकेशन सबसे पहला एप्लिकेशन नहीं है तो यह कुछ भी नहीं करता है। अंत में, BringWindowToTop केवल विंडो को शीर्ष पर लाता है, और कीबोर्ड फोकस नहीं बदलता है।

2

क्या आपने SetWindowPos का उपयोग करने का प्रयास किया है। विंडोज़ में जेड-ऑर्डर को स्थानांतरित करने, आकार बदलने और सेट करने के लिए यह कैननिकल फ़ंक्शन है। एक SWP_NOACTIVATE ध्वज है जिसका आप उपयोग कर सकते हैं। http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx पर देखें। मैंने दूसरी प्रक्रिया से संबंधित खिड़की पर यह कोशिश नहीं की है, लेकिन शायद यह एक कोशिश के लायक है।

1

SetWindowPos + SWP_NOACTIVATE नौकरी करता है।

0

आप विंडो के एचडब्ल्यूएनडी प्राप्त करने के लिए FindWindow का उपयोग कर सकते हैं, फिर Win32 API में प्राप्त BringWindowToTop फ़ंक्शन का उपयोग करें।