使用PostMessage将文本发送到非活动窗口不能发送移位

时间:2015-06-09 05:31:32

标签: c++ windows

好的,所以我创建了一个非常简单的SendText函数

time.nist.gov

问题非常明显,但解决方法却不是。如果发送字符串

Hello World!

输出的文字是" hello world1" ...

但是,此应用处理我的消息的方式,我无法简单地检查是否需要保留转移并发送VK_SHIFT消息。基本上,该应用程序不处理KEYDOWN和KEYUP消息,它只是将它们视为按键事件。

所以它变成了Shift Pressed / Released ..... Key Pressed / Released ... Shift Pressed / Released。

目标:

以某种方式使用单个postmessage将正确的移位或未移位角色发送到应用程序。或者可能还有其他想法,为什么keydown / keyups只是被翻译成keypressed。它必须能够在后台处理(ala no send input)

1 个答案:

答案 0 :(得分:0)

如评论中所述,您的项目可能不是Unicode。
从我的一个项目中得到这个,发送密钥现在应该可以工作。

Permalink

请注意,我遇到了发送字符串的问题 - 全文消息 - 因为窗口可能无法(能够)以您发送它们的速度处理它们。密钥之间的小延迟可以解决此问题。在我的项目中,我有一个发送文本的线程,使用std::queue(使用互斥...)来处理所有文本。因此,如果你有一个线程,那么对Sleep的短暂调用就不会太错误。
您可以尝试不同的延迟,也总是取决于您的计算机。较旧的操作系统或较旧的计算机可能较慢并且需要较高的延迟。您可以添加对OS /规范的检查,也可以选择用户定义文本字符之间的延迟。

如果有人有直接解决方案将 Shift 发送到后台窗口,请随时留言,我会编辑我的答案。