के लिए प्रतीक्षा कर रहा है मुझे वैश्विक हॉटकी पंजीकृत करने के लिए एक सी # एपीआई लिखनी है। WM_HOTKEY संदेश प्राप्त करने के लिए, मैं System.Windows.Forms.NativeWindow
का उपयोग करता हूं और System.Windows.Forms.Application.Run(ApplicationContext)
के साथ अपना संदेश लूप चलाता हूं। जब उपयोगकर्ता हॉटकी पंजीकृत करना चाहता है, तो उसे RegisterHotkey()
नामक एक विधि चलाने की आवश्यकता है जो System.Windows.Forms.ApplicationContext.ExitThread()
के साथ संदेश लूप को रोकता है, RegisterHotKey()
(पी/Invoke) फ़ंक्शन के साथ हॉटकी को पंजीकृत करता है और संदेश लूप को फिर से शुरू करता है। यह आवश्यक है, क्योंकि RegisterHotKey()
को उसी थ्रेड के भीतर बुलाया जाना चाहिए जिसने विंडो बनाई है, जिसे फिर से उसी थ्रेड के भीतर तुरंत चालू किया जाना चाहिए जो संदेश लूप चलाता है।सी # - WinForms संदेश लूप
समस्या यह है, उपयोगकर्ता कॉल RegisterHotkey()
विधि शीघ्र ही धागा जो संदेश पाश चल रहा है शुरू करने के बाद, ApplicationContext.ExitThread()
Application.Run(ApplicationContext)
से पहले कहा जाता हो जाता है और इसलिए आवेदन ब्लॉक अनिश्चित काल के लिए कि। क्या किसी को संदेश लूप शुरू करने की प्रतीक्षा करने के लिए कोई दृष्टिकोण पता है?
अग्रिम धन्यवाद!
यह बहुत समझ में नहीं आता है। * जब आप संदेश लूप शुरू करते हैं तो पहले RegisterHotkey() * को कॉल करें। साथ ही, एक वास्तविक विंडो की आवश्यकता है, आपके पास वैध संभाल होना चाहिए। –
चूंकि मैं प्रति हॉटकी पर एक संदेश लूप शुरू नहीं करना चाहता हूं, इसलिए मुझे उसी थ्रेड के भीतर RegisterHotKey() को कॉल करने के लिए मौजूदा को रोकना और पुनरारंभ करना होगा। और चूंकि मेरा कोड काम कर रहा है, मुझे नहीं लगता कि मुझे एक वास्तविक विंडो की आवश्यकता है, वैध हैंडल 'नेटिव विन्डो.क्रेटहैंडल (CreateParams)' द्वारा बनाया गया है। –