好的,所以我创build了一个非常简单的SendText函数
void SendText(string str) { for (std::string::iterator it = str.begin(); it != str.end(); ++it) { PostMessage(h, WM_KEYDOWN, VkKeyScan(*it), 0); } return; }
问题很明显,但解决方法不是。 如果发送string
你好,世界!
输出的文字是“hello world1”…
然而,这个应用程序处理我的消息的方式,我不能简单地检查是否需要保持移位并发送VK_SHIFT消息。 基本上,应用程序不处理KEYDOWN和KEYUP消息,它只是将它们视为按键事件。
所以变成按下/释放按键/按下/释放按下/按下按下/释放。
目标:
以某种方式使用单个postmessage发送正确的转移或未转移的字符到应用程序。 或者也许可能是其他的想法,为什么keydown /键盘只是翻译为keypressed。 它必须能够在后台处理(阿拉不发送input)
正如评论中提到的,你的项目可能不是Unicode。
把它从我的一个项目中取出,发送密钥现在应该可以工作。
永久链接
请注意,我遇到了发送字符串的问题 – 整个文本消息 – 因为窗口可能无法(能够)处理它们的速度与发送它们一样快。 键之间的小延迟可以解决这个问题。 在我的项目中,我有一个发送文本的线程,使用一个std ::队列 (互斥体…)来处理所有的文本。 因此,如果你有一个这样的线程,一个短暂的Sleep
呼吁不会太错误。
你可以尝试不同的延迟,也总是取决于你的电脑。 较旧的操作系统或较旧的计算机可能较慢并且需要较高的延迟。 您可以添加检查的操作系统/规格,或用户定义文字的字符之间的延迟选项。
如果任何人有一个直接的解决方案发送转移到背景窗口,随时留下评论,我会编辑我的答案。