使用PostMessage将文本发送到非活动窗口无法发送移位
Sending Text to a non-active window using PostMessage can't send shift though
好的,我创建了一个非常简单的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 World !
输出文本为"hello world1"…
然而,这个应用程序处理我的消息的方式,我无法简单地检查是否需要保持shift并发送VK_SHIFT消息。基本上,应用程序不处理KEYDOWN和KEYUP消息,它只是把它们当作按键事件。
所以它变成Shift Pressed/release .....按/放键…Shift按下/释放
目标:
以某种方式使用单个postmessage将正确的移位或未移位字符发送到应用程序。或者可能是其他关于为什么keydown/keyups只是被翻译为按键的想法。它必须能够在后台处理(不发送输入)
正如在注释中提到的,您的项目可能不是Unicode。
从我的一个项目中取出这个,发送密钥现在应该可以工作了。
永久链接
请注意,我在发送字符串(整个文本消息)时遇到了问题,因为窗口可能无法(能够)处理它们的速度与发送它们的速度一样快。键之间的小延迟可以解决这个问题。在我的项目中,我有一个用于发送文本的线程,使用std::队列(带互斥锁…)来完成所有文本。因此,对Sleep
的简短调用不会太错,以防您有此线程。
你可以尝试不同的延迟,也总是取决于你的电脑。较旧的操作系统或较旧的计算机可能较慢,并且需要较高的延迟。您可以添加对操作系统/规格的检查,或者用户定义文本字符之间的延迟选项。
如果有人有直接的解决方案将Shift发送到背景窗口,请随时留下评论,我会编辑我的答案。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何在cpp文件之间切换窗口?在Qt中
- QuadTree只在窗口的右上角绘制
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 如何在C++中找到active directory中禁用和锁定的窗口帐户
- 处理闪烁窗口事件
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- C++win32 API创建多个类似视口的窗口
- SFML RenderWindow打开窗口需要很长时间
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 获取 SFML 窗口的 HWND 和高可用性?
- 如何获取 GLFW 窗口 ID?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 用于窗口的 HID 终端
- PostMessage:如何将消息发布到没有窗口的进程
- 用PostMessage和SendNotifyMessage广播到自己的窗口
- 使用PostMessage将文本发送到非活动窗口无法发送移位