【发布时间】:2011-06-29 11:58:57
【问题描述】:
我使用SetWindowsHookEx 和WH_MOUSE_LL 全局(系统范围)过滤某些鼠标点击。问题是它不适用于 WPF 应用程序(无论我是否指示系统忽略这些点击,所有 WPF 应用程序都会检测到鼠标点击)。我已经问过similar question here,但我假设 WPF 使用DirectInput 而不是标准的 Windows 消息来检测输入。但真的吗?
我已经找到了能够inject mouse clicks into WPF applications using SendMessage 的代码。如果这是可能的,那么我认为这在某种程度上意味着 WPF 不使用DirectInput 进行鼠标输入。但是,为什么无法阻止 WPF 应用程序使用SetWindowsHookEx 检测鼠标点击?
虽然这个问题主要是关于鼠标输入的,但我也想知道它对键盘输入的作用。
示例
我快速创建了以下解决方案来重现奇怪的 WPF 行为。它由 3 个项目组成:
HookTester
启动项目,自动启动其他2个项目,所以你应该主要关注这个。启动时安装鼠标钩子,关闭窗体时卸载鼠标钩子。WinFormsTest
包含一个带有默认上下文菜单的文本框,您可以在其中测试鼠标右键。当 HookTester 运行时,您应该无法使用鼠标右键调用上下文菜单。WpfTest
还包含一个 TextBox,带有自定义上下文菜单(尽管我也可以使用默认菜单),所以这又是测试鼠标右键的地方。只要 HookTester 正在运行,您就不能调用上下文菜单(使用鼠标右键),但出于某种原因,无论如何都会显示菜单(为什么???)。
警告:当您运行解决方案时,HookTester 项目将启动并立即安装挂钩以拒绝任何鼠标右键单击(系统范围内)。您只需关闭 HookTester 表单即可轻松卸载挂钩。谨慎测试。
【问题讨论】:
标签: .net wpf input hook mouse-hook