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