首页 > 其他分享 >请勿使用PostMessage来模拟键盘输入

请勿使用PostMessage来模拟键盘输入

时间:2022-11-12 19:40:31浏览次数:49  
标签:PostMessage Windows 键盘输入 SendInput 队列 消息 请勿 event 输入


有些人希望通过向窗口的输入消息队列发送键盘消息,来实现键盘的模拟。
从很多方面来说,这不大靠谱,为何?

首先,键盘输入比那些印在英文键盘上的字母要复杂得多。带有重音符号的语言有死键(Dead Key),远东语言有各种输入法编辑器,我不知道复杂的脚本语言如何处理输入。
这意味着,键入字符不仅仅是按一个键,而可能是按下一个组合键。

其次,即使你有办法将输入的消息投递到目标窗口的消息队列中,也不会更新键盘 SHIFT 按键的状态。当其他应用程序代码调用 GetKeyState 函数或 GetAsyncKeyState 函数时,它会看到“真实”的移位状态,而不是你投递的消息生成的虚假状态。

有一个办法

SendInput 函数设计用于将输入注入到窗口消息队列中。如果你使用这个 API ,那么至少可以正确地处理 SHIFT 按键的状态。(不过,我无法帮助你解决复杂的输入问题。)
尽管可以使用 SendInput,但是有些人可能会说,我还可以使用 mouse_event 和 keybd_event。
但如果你仔细查看 MSDN,则会看到文档里有这么一句话:
Note This function has been superseded. Use SendInput instead.

也就是说,官方推荐我们使用 SendInput,而不是***_event。
“superseded”的意思是:我以将这个 API 标记为 “过时的,废弃的”,可能在以后的某个新版本Windows中,这两个函数将不再可用。
所以,长痛不如短痛,还是尽量使用 SendInput 吧。

总结

赶紧打开我的 Topomel Box 工程,搜索了下:嗯,确实是用的 SendInput。
妥了。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

请勿使用PostMessage来模拟键盘输入_消息队列

 

标签:PostMessage,Windows,键盘输入,SendInput,队列,消息,请勿,event,输入
From: https://blog.51cto.com/u_15805075/5846745

相关文章