2009-01-26 16 views
6

Estaba usando Application.AddMessageFilter() en mis aplicaciones WinForms (cuando se trabaja con código no administrado).WPF equivalente a Application.AddMessageFilter (Windows Forms)

Ahora estoy cambiando a WPF y no puedo encontrar esta funcionalidad.

Aconseje donde se puede encontrar o implementar.

+1

[http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2/](http://social.msdn.microsoft .com/Foros/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2 /) parece una solución/edición: pregunta similar aquí: [http://stackoverflow.com/questions/476084/c -twain-interaction] (http://stackoverflow.com/questions/476084/c-twain-interaction) – Sebastian

Respuesta

0

Si desea controlar un mensaje de ventana, puede utilizar el método HwndSource.AddHook. El siguiente ejemplo muestra cómo usar el método Hwnd.AddHook. Si desea supervisar un mensaje de ámbito de aplicación, puede intentar utilizar la clase 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

En WPF, puede usar el evento ComponentDispatcher.ThreadFilterMessage.

ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage; 
private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled) 
{ 
    if (msg.message == 513)//MOUSE_LEFTBUTTON_DOWN 
    { 
     //todo 
    } 
}