1

我正在开发一个 C# 应用程序,它监视键盘和鼠标事件,并在发生预设组合的键或鼠标按钮按下时做出反应。热键检测已经通过使用键盘和鼠标挂钩起作用。但是,当应用程序的答案是使用 SendInput() 发送新的组合键时,我遇到了麻烦。

假设应用程序等待“ Alt+RMB ”m 抑制它并改为发送“ Shift+A ”。当我开始物理按下“ Alt+RMB ”时,检测到组合并发送虚拟“ Shift+A ”。

然而,假按键立即与原始键混合,因此应用程序现在检测到“ Alt+Shift+A+RMB ”组合不再是“ Alt+RMB ”,因此“ Shift+A ”停止发送。虚拟按键清除系统后,我的真实热键再次被检测到,循环重新开始。(“ A ”需要用“ B ”替换而“ B ”用“ A ”替换的设置会导致无限循环。)

所以看来我的主要问题是区分真实和虚拟键/鼠标事件。有什么建议么?

(是的,该任务确实类似于Autohotkey所做的。但是,我在热键检测和可选的虚拟输入发送步骤之间有自定义业务逻辑。使用Autohotkey.dll可能是一种选择,但我担心 a 的性能影响在那里运行的自定义脚本解释器。)

4

1 回答 1

0

事实证明,虚拟键/鼠标事件的正确术语是“注入”,并且低级键盘挂钩确实在KBDLLHOOKSTRUCT中提供了相关标志。

现在我修改了与钩子相关的事件管理,因此它允许带有“LLKHF_INJECTED”标志的任何事件通过,而不会抑制或通知有关它的主要逻辑。

于 2012-05-16T18:04:12.540 回答