के निर्माण को मजबूर करना मुझे अपने कुछ WPF विंडो के Win32 विंडो हैंडल तक पहुंचने की आवश्यकता है ताकि मैं Win32 सक्रियण संदेशों को संभाल सकूं। मुझे पता है कि Win32 विंडो हैंडल प्राप्त करने के लिए मैं PresentationSource.FromVisual
या WindowInteropHelper
का उपयोग कर सकता हूं, लेकिन यदि WPF विंडो अभी तक नहीं बनाई गई है तो मैं समस्याओं में भाग रहा हूं।एक WPF विंडो के मूल Win32 हैंडल
यदि मैं PresentationSource.FromVisual
का उपयोग करता हूं और विंडो नहीं बनाई गई है, तो लौटाया गया PresentationSource
शून्य है। अगर मैं WindowInteropHelper
का उपयोग करता हूं और विंडो नहीं बनाई गई है, तो Handle
संपत्ति IntPtr.Zero
(शून्य) है।
मैंने हैंडल तक पहुंचने का प्रयास करने से पहले विंडो पर this.Show()
और this.Hide()
पर कॉल करने का प्रयास किया। मैं फिर हैंडल प्राप्त कर सकता हूं, लेकिन विंडो स्क्रीन पर क्षणिक रूप से चमकती है (बदसूरत!)।
क्या कोई भी WPF विंडो बनाने के लिए मजबूर करने के तरीके के बारे में जानता है? विंडोज फॉर्म में यह Form.Handle
संपत्ति तक पहुंचने जितना आसान था।
संपादित करें: मैं क्रिस टेलर के जवाब पर एक संस्करण के साथ जा रहा था। यहाँ यह है, के मामले में यह किसी और में मदद करता है:
static void InitializeWindow(Window window)
{
// Get the current values of the properties we are going to change
double oldWidth = window.Width;
double oldHeight = window.Height;
WindowStyle oldWindowStyle = window.WindowStyle;
bool oldShowInTaskbar = window.ShowInTaskbar;
bool oldShowActivated = window.ShowActivated;
// Change the properties to make the window invisible
window.Width = 0;
window.Height = 0;
window.WindowStyle = WindowStyle.None;
window.ShowInTaskbar = false;
window.ShowActivated = false;
// Make WPF create the window's handle
window.Show();
window.Hide();
// Restore the old values
window.Width = oldWidth;
window.Height = oldHeight;
window.WindowStyle = oldWindowStyle;
window.ShowInTaskbar = oldShowInTaskbar;
window.ShowActivated = oldShowActivated;
}
// Use it like this:
InitializeWindow(myWpfWindow);
क्या आपने यह प्रश्न देखा है - http://stackoverflow.com/questions/1556182/finding-the-handle-to-a-wpf-window - यह मदद नहीं कर सकता क्योंकि यह उल्लेख नहीं करता है कि विंडो पहले से मौजूद है या नहीं या नहीं। – ChrisF
@ChrisF: धन्यवाद! हाँ, मैंने इसे देखा है। दुर्भाग्यवश, खिड़की के साथ समस्या अभी तक नहीं बनाई जा रही है। –
मैंने सोचा कि मैं इसका उत्तर प्राप्त करने के लिए इसका उल्लेख करूंगा ताकि यदि आपका मामला अलग हो तो इसे डुप्लिकेट के रूप में नहीं चुना जाएगा। – ChrisF