激活热键组合后如何正确模拟键盘事件

时间:2012-11-05 21:53:54

标签: c# keyboard-events sendinput

我有一个程序可以注册某个热键组合以进行激活。出于这个问题的目的,让我们说这个热键是Ctrl + Alt + D.一旦按下组合,我的程序将使用SendInput模拟一些其他键盘事件到活动窗口,例如,它可以模拟Ctrl + A.我的问题是Ctrl + A的模拟不能正常工作,因为(我认为)仍然从热键组合中按下Ctrl键。我想要做的其中一个解决方案是为我的热键组合中的每个键发送Key Up事件,然后模拟Ctrl + A,但是我想检查这是否是正确的处理方式?

1 个答案:

答案 0 :(得分:1)

首先,要了解询问如何发送键盘消息的问题经常被问到。我假设你没有花太多时间寻找以前的答案。其次,要了解初学者经常错误地认为发送键盘消息是最简单,最有效的解决方案。事实是,它通常不是最简单的,也不是最有效的,也不是最可靠的。

如果你打算使用这样的Windows消息,那么学会使用Spy ++。如果你不知道那是什么,那么请通过熟悉VS Tools菜单中可用的工具来投入一分钟。

可能更容易,更有效和更可靠的解决方案通常是使用WM_GETTEXT和WM_SETTEXT消息。并预测未来的问题,在另一个应用程序中按下按钮会向该按钮的父级发送BN_CLICKED通知。您可以使用Spy ++获得更多有关消息问题的答案。

使用SendInput可能是最适合您的解决方案,但是没有提供足够的要求来确定。在我看来,SendInput应该是最后的手段,只有在其他可能性无法实现时才使用。请花一些时间阅读与该问题相关的众多文章和之前的答案。