2012-05-20 9 views
42

मेरे डब्ल्यूपीएफ एप्लिकेशन में एक से अधिक विंडो हैं, मुझे प्रत्येक विंडो इंस्टेंस के एचडब्ल्यूएनडी प्राप्त करने में सक्षम होना चाहिए ताकि मैं उन्हें Win32 API कॉल में उपयोग कर सकूं।विंडो इंस्टेंस के एचडब्ल्यूएनडी कैसे प्राप्त करें?

क्या का उदाहरण मैं करना चाहते हैं:

Window myCurrentWindow = Window.GetWindow(this); 
IntPtr myhWnd = myCurrentWindow.hWnd; // Except this property doesn't exist. 

यह करने के लिए सबसे अच्छा तरीका क्या है?

+2

संभावित डुप्लिकेट [क्या यह एक WPF पॉपअप नियंत्रण का Hwnd प्राप्त करना संभव है?] (Http://stackoverflow.com/questions/7815121/is-it-possible-to-get-the-hwnd-of- ए-डब्ल्यूपीएफ-पॉपअप-कंट्रोल) –

+2

@ हंसपैसेंट: अन्य प्रश्न संबंधित पॉपअप नियंत्रण, वास्तविक विंडोज़ नहीं। (हां, इस सवाल पर भी अप्रत्यक्ष रूप से इसका उत्तर दिया गया था, लेकिन यह एक डुप्लिकेट नहीं है।) – Douglas

उत्तर

58

WindowInteropHelper आपका मित्र है। इसमें एक निर्माता है जो Window पैरामीटर स्वीकार करता है, और Handle संपत्ति जो इसकी विंडो हैंडल देता है।

Window window = Window.GetWindow(this); 
var wih = new WindowInteropHelper(window); 
IntPtr hWnd = wih.Handle; 
9

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

var window = Window.GetWindow(element); 

IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle(); 

ध्यान दें कि Window.GeWindownull लौट सकते हैं, तो आप वास्तव में वह भी परीक्षण करना चाहिए।

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