• 请勿使用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》

     

  • 相关阅读:
    补充d2l.torch库里面缺失train_ch3函数
    六、变量与常量
    Linux 进程概念 —— 冯 • 诺依曼体系结构
    (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
    前端缓存技术
    子类到底能不能继承父类的私有属性?
    基于Ubuntu16.04的docker准备ZMQ的C++开发环境
    基于SSH开发在线问卷调查系统
    IPv6 OSPFv3 和区域认证【下一代互联网05】
    从不均匀性角度浅析AB实验
  • 原文地址:https://blog.csdn.net/mmxida/article/details/127725092