我过去曾使用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值)。
答案 0 :(得分:2)
我认为您需要使用PostMessage
而不是SendMessage
。除了将消息传递给接收方之外,它几乎是相同的。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944%28v=vs.85%29.aspx