您可以钩取这些冒泡的
routed events,其中真正的参数会获取所有事件,即使它们已经被处理,甚至如果它们在子控件内部。所以在您的可视化层次结构的顶部的某个地方添加它们:)
WPF处理程序
AddHandler(KeyUpEvent, new KeyEventHandler(OnKeyUp), true);
AddHandler(MouseUpEvent, new MouseButtonEventHandler(OnMouseUp), true);
private void OnMouseUp(Object sender, MouseButtonEventArgs e)
{
}
private void OnKeyUp(Object sender, KeyEventArgs e)
{
}
“是的,您可以通过Interop在WPF中使用SendMessage、PostMessage和SendInput函数。”
“Interop”指的是跨操作系统或跨语言使用代码的技术。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
internal static extern UINT SendInput(UINT nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize);
然后,您只需使用Interop注入您的消息。是的,在WPF中也可以将自己钩子到winproc上。有关详细信息,请参见
此帖子。
pinvoke.net是w32 C#互操作的良好来源,但某些东西告诉我您已经知道了这一点 :) 您可以在
这里找到发送输入的示例。
希望对您有所帮助。