
【键盘|请勿使用PostMessage来模拟键盘输入】有些人希望通过向窗口的输入消息队列发送键盘消息 , 来实现键盘的模拟 。
从很多方面来说 , 这不大靠谱 , 为何?
首先 , 键盘输入比那些印在英文键盘上的字母要复杂得多 。 带有重音符号的语言有死键(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平台开发者来说 , 确实十分有帮助 。
本文来自:《You can’t simulate keyboard input with PostMessage》
- 作为电脑最重要|怒喵公布am65lessbacktothefuture键盘
- 12月13日消息|怒喵科技am65less键盘即将发布
- 键盘|砍掉方向键见过么?怒喵全新AM 65 Less键盘即将发布
- 由于注射器是临床和药物注射的关键医疗器械|一次性使用无菌注射器活塞滑动初始力和平均力如何检测?
- 金舟视频格式转换器怎么使用?
- 平时在使用电脑中|电脑时间不对是什么原因引起的?
- 平时在使用CorelDRAW的过程中|coreldraw画布上面有很多线条怎么删除?
- 在Excel表格的使用中|excel怎么快速批量删除所有空白行
- 平时在使用电脑的过程中|不想重启电脑的情况下,怎么恢复电脑原样
- 相信大家平时在word的使用中|如何去除word文档的只读模式
