2009-01-26 44 views
6

Tôi đã sử dụng Application.AddMessageFilter() trong các ứng dụng WinForms của mình (khi làm việc với mã không được quản lý).WPF tương đương với Application.AddMessageFilter (Windows Forms)

Bây giờ tôi đang chuyển sang WPF và không thể tìm thấy chức năng này.

Vui lòng tư vấn nơi có thể tìm thấy hoặc triển khai.

+1

[http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2/](http://social.msdn.microsoft .com/Diễn đàn/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2 /) trông giống như giải pháp/chỉnh sửa: câu hỏi tương tự ở đây: [http://stackoverflow.com/questions/476084/c -twain-interactive] (http://stackoverflow.com/questions/476084/c-twain-interaction) – Sebastian

Trả lời

0

Nếu bạn muốn theo dõi tin nhắn cửa sổ, bạn có thể sử dụng phương thức HwndSource.AddHook. Ví dụ sau đây cho thấy cách sử dụng phương thức Hwnd.AddHook. Nếu bạn muốn giám sát một thông báo phạm vi ứng dụng, bạn có thể thử sử dụng lớp ComponentDispatcher.

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

Trong WPF, bạn có thể sử dụng sự kiện ComponentDispatcher.ThreadFilterMessage.

ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage; 
private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled) 
{ 
    if (msg.message == 513)//MOUSE_LEFTBUTTON_DOWN 
    { 
     //todo 
    } 
} 
Các vấn đề liên quan