我正在开发一个 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 的性能影响在那里运行的自定义脚本解释器。)