2009-01-26 11 views
6

मैं Application.AddMessageFilter() का उपयोग अपने WinForms अनुप्रयोगों (अप्रबंधित कोड के साथ काम करते समय) में कर रहा था।WPF अनुप्रयोग के बराबर। AddMessageFilter (विंडोज फॉर्म)

अब मैं WPF पर स्विच कर रहा हूं और यह कार्यक्षमता नहीं ढूंढ सकता।

कृपया सलाह दें कि यह कहां पाया या कार्यान्वित किया जा सकता है।

+1

[http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2/](http://social.msdn.microsoft .com/मंच/एन-यूएस/डब्ल्यूपीएफ/थ्रेड/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2 /) एक समाधान/संपादन की तरह दिखता है: इसी तरह का प्रश्न यहां: [http://stackoverflow.com/questions/476084/c -twain-बातचीत] (http://stackoverflow.com/questions/476084/c-twain-interaction) – Sebastian

उत्तर

0

यदि आप एक विंडो संदेश की निगरानी करना चाहते हैं, तो आप HwndSource.AddHook विधि का उपयोग कर सकते हैं। निम्न उदाहरण दिखाता है कि Hwnd.AddHook विधि का उपयोग कैसे करें। यदि आप एप्लिकेशन स्कोप संदेश की निगरानी करना चाहते हैं, तो आप घटक डिस्प्लेचर क्लास का उपयोग करने का प्रयास कर सकते हैं।

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Window wnd = new Window(); 
    wnd.Loaded += delegate 
    { 
     HwndSource source = (HwndSource)PresentationSource.FromDependencyObject(wnd); 
     source.AddHook(WindowProc); 
    }; 
    wnd.Show(); 
} 
private static IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
} 
1

WPF में, आप ComponentDispatcher.ThreadFilterMessage घटना का उपयोग कर सकते हैं।

ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage; 
private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled) 
{ 
    if (msg.message == 513)//MOUSE_LEFTBUTTON_DOWN 
    { 
     //todo 
    } 
} 
संबंधित मुद्दे