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

void SendText(string str)
{
    for (std::string::iterator it = str.begin(); it != str.end(); ++it)
    {
        PostMessage(h, WM_KEYDOWN, VkKeyScan(*it), 0);
    }
return;
}

这个问题很明显,但是解决方法却没有。如果发送字符串

你好,世界!

输出的文本是“hello world1” ...

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

因此它变成Shift按下/释放.....键按下/释放... Shift按下/释放。

目标:

要以某种方式使用单个后消息将正确的移位或未移位字符发送到应用程序。也许还有其他想法,关于为什么将键击/键击仅转换为按键操作。而且它必须能够在后台处理(也没有发送输入)

最佳答案

如评论中所述,您的项目可能不是Unicode。

从我的项目之一中删除此内容,现在应该可以发送密钥了。

Permalink

请注意,我在发送字符串-整个文本消息时遇到了问题,因为窗口可能无法(不能)像发送字符串一样快地处理它们。按键之间的小延迟可以解决此问题。在我的项目中,我有一个发送文本的线程,使用std::queue(带有互斥锁...)处理所有文本。因此,如果您有一个线程,对 Sleep 的简短调用就不会太错误。

您可以尝试不同的延迟,也总是取决于您的计算机。较旧的操作系统或较旧的计算机可能速度较慢,并且需要较大的延迟。您可以添加对OS / spec的检查,也可以选择用户定义文本字符之间的延迟。

如果有人可以直接将Shift发送到后台窗口,请随时发表评论,我将编辑我的答案。

08-27 02:01
查看更多