2010-04-09 17 views
6

के भीतर एक्सई प्रोग्राम खोलना डब्ल्यूपीएफ यह सुनिश्चित नहीं है कि यह संभव है, लेकिन क्या एक और प्रोग्राम खोलने का कोई तरीका है जैसे डब्ल्यूपीएफ विंडो के कंटेनर के भीतर नोटपैड? वेबब्रोसर नियंत्रण का उपयोग कर एक वेब पेज खोलने में सक्षम होने के समान ही?डब्ल्यूपीएफ डब्ल्यूपीएफ विंडो

असल में मैं नोटपैड या अन्य एक्सई खोलना चाहता हूं लेकिन इसे xaml/C# code का उपयोग करके WPF विंडो कंटेनर में बाध्य रखना चाहता हूं? सुनिश्चित नहीं है कि संभव है?

उत्तर

1

SetParent विधि

[DllImport("user32.dll", SetLastError = true)] 
private static extern IntPtr SetParent(IntPtr hwc, IntPtr hwp); 

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

यहां से मदद मिली है (यह भी शीर्षक पट्टी आदि बंद): http://channel9.msdn.com/forums/TechOff/250417-Hide-window-caption-in-c/

+0

खुशी है कि यह आपके लिए काम करता है। इसमें दो सीमाएं हैं जिनके बारे में आपको अवगत होना चाहिए: 1. शीर्षक पट्टी, बंद बटन, आदि प्रदर्शित नहीं होते हैं, इसलिए यह खिड़की की तरह नहीं दिखता है, और 2. यह अनुप्रयोगों में अनुप्रयोग विफलताओं का कारण बनता है जो एनसी_ घटनाओं पर भरोसा करते हैं, वह नॉनक्लिएंट क्षेत्र में पेंट करता है, या रूट विंडो खोजने के लिए अपने खिड़की के पेड़ को स्कैन करता है। दूसरी तकनीक कम आक्रामक और अधिक सार्वभौमिक है और वांछित होने पर नॉनक्लिएंट क्षेत्र को छिपाने की क्षमता भी प्रदान करती है। –

-1

आप ऐसा नहीं कर सकते हैं।

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

जेनेरिक EXEs इस तरह से काम नहीं करते हैं, और आप उन्हें अपने ऐप के अंदर एम्बेड नहीं कर सकते हैं।

+1

लेकिन तुम ** ** ऐसा कर सकते हैं। मेरा जवाब देखें –

6

हां यह संभव है।

आपको बस इतना करना है:

  1. एक WindowsFormsHost (जैसे नोटपैड के रूप में) प्रक्रिया बनाएँ और Process.Start
  2. कॉल प्रक्रिया का उपयोग कर अपने यूआई
  3. प्रारंभ में एक पैनल में जोड़ें। WaitForInputIdle
  4. उपयोग process.MainWindowHandle खिड़की संभाल
  5. कॉल SetWindowPos निर्देशांक के लिए प्रक्रिया की खिड़की स्थापित करने के लिए मिलता है और HwndHost खिड़की के Z आदेश को
  6. +०१२३५१६४१०
  7. हुक दोनों HwndHost और process.MainWindowHandle आकार परिवर्तन का पता लगाने और दोहराने के लिए कदम 5.

यह यह सब करने के लिए काफी सरल है। प्रभाव संपूर्ण नोटपैड विंडो (या आपने जो भी एप्लीकेशन शुरू किया) दिखाई देता है और ठीक उसी तरह व्यवहार करता है जैसे यह आपके WPF एप्लिकेशन का हिस्सा था।

+0

WaitForInputIdle किसी भी धागे को निष्क्रिय होने के लिए इंतजार कर रहा है, न केवल जीयूआई थ्रेड। –

+0

@ शेंग: अच्छा बिंदु। उपर्युक्त नोटपैड जैसे सरल एप्लिकेशन के लिए उपरोक्त काम करता है, लेकिन एक अधिक जटिल अनुप्रयोग के लिए चरण 4 को उस कोड के साथ प्रतिस्थापित करना आवश्यक हो सकता है जो समय-समय पर एनमविंडोज का उपयोग करता है जो गेटविंडो थ्रेडप्रोसेस आईडी से लौटाए गए मिलान मूल्य के साथ विंडो की खोज करता है और कोई अभिभावक नहीं होता है। किसी भी मामले में XAML/C# का उपयोग करना अभी भी संभव है। –