无法模拟击键

时间:2012-10-19 21:10:49

标签: c# winapi keyboard

我过去曾使用WIN32API调用来模拟击键而没有太多麻烦。即使是现在,在肤浅的层面上,它似乎也有效。我正在使用Win32 SendMessage调用将WM_KEYDOWN,WM_CHAR,WM_KEYUP消息发送到记事本的实例。

果然,无论发送什么,都会出现在记事本中。

但是在使用Spy ++检查消息时;我注意到我发送的Keystrokes与我实际键入的键或使用Windows内置屏幕键盘创建的键明显不同。

在Spy ++中,我的单个WM_KEYDOWN生成两行:

<001> 00234 S WM_KEYDOWN nVirtKey:'W'....
<002> 00234 R WM_KEYDOWN

按W键实时(或使用OnScreenKeyboard)只生成一行

<003> 00234 P WM_KEYDOWN nVirtKey:'W'...

如果我展开这些消息,我可以看到'S'代表已发送,R - '已接收',而P - '已发布'。

有谁可以告诉我如何以编程方式更准确地模拟键盘输入?我已经匹配了消息的其余部分(包括lParam值)。

1 个答案:

答案 0 :(得分:2)

我认为您需要使用PostMessage而不是SendMessage。除了将消息传递给接收方之外,它几乎是相同的。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944%28v=vs.85%29.aspx