दिलचस्प पोस्ट
अवलोकन के समय को सूचित करें जब आइटम में परिवर्तन होता है Sysmodules को असाइनमेंट के बाद __name__ का मूल्य क्यों बदल रहा है? MVC में 'डेटा-वाल-नंबर' संदेश सत्यापन को कैसे बदलें, जबकि इसे @Html सहायक द्वारा उत्पन्न किया जाता है जावा, पास-बाय-वैल्यू, रेफरेंस वेरिएबल्स सिएरा में सुरक्षा / कोडनिंग: चाबी का गुच्छा अनुमति नियंत्रण सेटिंग्स और UI- अनुमति के लिए संकेत देता है क्यों विम विशेषज्ञों टैब पर बफ़र्स पसंद करते हैं? एक क्वेरी php में एकाधिक mysql INSERT स्टेटमेंट पायथन में इकाई परीक्षणों का क्रम बदलना कैसे pyspark में dataframe स्तंभ नाम बदलने के लिए? क्यों सी # में पूर्णांक विभाजन एक पूर्णांक देता है, लेकिन एक फ्लोट नहीं? क्या मुझे जेएस पुस्तकालयों के लिए Google API के बादल से लिंक करना चाहिए? PHP में बहुत बड़ी फाइल पढ़ना जावास्क्रिप्ट में एक इनपुट टेक्स्ट वैल्यू कैसे प्राप्त करें प्रदर्शन के लिए किसी वस्तु के ] को क्यों बदलना है? एंड्रॉइड प्रोजेक्ट से सभी अप्रयुक्त संसाधन निकालें

SetParent का उपयोग करते हुए बाहरी प्रक्रिया में HWND को एम्बेड करना

मैं अपनी प्रक्रिया से एक विंडो को बाहरी प्रक्रिया की विंडो में एम्बेड करने की कोशिश कर रहा हूं और मुझे कुछ समस्याएं आ रही हैं जो मुझे उम्मीद है कि कोई मेरी मदद कर सकता है। सबसे पहले, यह एक रूपरेखा है कि मैं वर्तमान में अपने विंडो को एप्लिकेशन में एम्बेड करने के लिए क्या कर रहा हूं:

HWND myWindow; //Handle to my application window HWND externalWindow; //Handle to external application window SetParent(myWindow,externalWindow); //Remove WS_POPUP style and add WS_CHILD style DWORD style = GetWindowLong(myWindow,GWL_STYLE); style = style & ~(WS_POPUP); style = style | WS_CHILD; SetWindowLong(myWindow,GWL_STYLE,style); 

यह कोड काम करता है और अन्य विंडो में मेरी विंडो प्रकट होती है, लेकिन निम्नलिखित मुद्दों का परिचय देता है:

  • जब मेरी खिड़की इनपुट फ़ोकस को लाभ देती है, तो बाहरी प्रक्रिया का मुख्य अनुप्रयोग विंडो फोकस खो देता है (यानी टाइटल बार परिवर्तन रंग)
  • मुख्य विंडो के कीबोर्ड शॉर्टकट आदेश काम नहीं करते हैं जबकि मेरी विंडो में फोकस होता है

क्या किसी को इसके लिए एक वैकल्पिक हल पता है? मैं अपने विंडो को मुख्य अनुप्रयोग की सिर्फ एक और बच्चे की खिड़की के रूप में माना जाएगा

वेब के समाधान से एकत्रित समाधान "SetParent का उपयोग करते हुए बाहरी प्रक्रिया में HWND को एम्बेड करना"

खैर, मुझे अंत में मेरे प्रश्न का उत्तर मिला।

मुख्य ऐप थ्रेड के लिए एम्बेडेड विंडो थ्रेड को अटैच करने के लिए एटैचथ्रेडइनपॉप फ़ंक्शन का उपयोग करने की आवश्यकता के लिए मुख्य ऐप को खोने के साथ समस्या को ठीक करने के लिए।

साथ ही, डब्ल्यूएएम_केयर्ड संदेश के जवाब में अनुवाद एक्सेलेरेटर फ़ंक्शन का उपयोग कर सकते हैं ताकि यह सुनिश्चित हो सके कि मुख्य ऐप के त्वरक संदेशों को ट्रिगर किया गया है।

मुझे यकीन नहीं है कि अगर आप लगभग तीन साल बाद भी इस विषय में दिलचस्पी रखते हैं। मैं एक समान आवेदन पर काम कर रहा हूं मेरा समाधान है कि आप SetParent को कॉल करने से पहले विंडो शैली को संशोधित करना है इस समाधान के साथ, मुझे AttachThreadInput को कॉल करने की ज़रूरत नहीं है

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

मुझे WM_NACTIVE संदेश का उपयोग करते हुए Catch22.net पर कुछ जानकारी मिली।

यह खंड में है विंडो निष्क्रिय करना रोकें उम्मीद है की वो मदद करदे।

एमएसडीएन डॉक्टर को ध्यान से पढ़ने के बाद, मैं एक ही मुद्दा में भाग गया, मुझे यह आसान तय मिला

आपको WS_POPUP को हटाना चाहिए और इससे पहले कि आप कॉल करने के लिए set-parent कहते हैं WS_CHILD

यह एमएसडीएन में कहा गया है:

संगतता कारणों के लिए, SetParent विंडो की WS_CHILD या WS_POPUP विंडो शैलियों को संशोधित नहीं करता है जिसके अभिभावक को बदला जा रहा है। इसलिए, यदि hWndNewParent NULL है, तो आपको WS_CHILD बिट को भी साफ़ करना चाहिए और SetParent कॉल करने के बाद WS_POPUP स्टाइल सेट करना चाहिए। इसके विपरीत, यदि hWndNewParent नल नहीं है और खिड़की पहले डेस्कटॉप का बच्चा था, तो आपको WS_POPUP शैली को साफ़ करना चाहिए और SetParent को कॉल करने से पहले WS_CHILD शैली को सेट करना चाहिए।

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633541(v=vs.85).aspx