我有一个用于发送Unicode字符串(不击键)由于在Windows XP和Windows 7的SendInput API我试了一下在Windows 10,注意到一个应用程序,如果目标应用程序是UWP(如边缘时,OneNote等。 ),Unicode字符串并不总是正确的处理。例如,如果应用程序调用SendInput用“你好”的字符串,然后应用程序显示是“你好”,“他”,甚至什么都没有。感谢您的意见
下面是代码,基于Qt的集成:
QString text;
...
int i = 0;
while (i < result.length())
{
...
// Check if some char needs to be filtered out or converted
...
INPUT Input;
Input.type = INPUT_KEYBOARD;
Input.ki.time = 0;
Input.ki.dwExtraInfo = 0;
Input.ki.wVk = 0;
Input.ki.wScan = text.mid(i, 1).utf16()[0];
Input.ki.dwFlags = KEYEVENTF_UNICODE;
SendInput(1, &Input, sizeof(INPUT));
Input.ki.dwFlags |= KEYEVENTF_KEYUP;
SendInput(1, &Input, sizeof(INPUT));
i++;
}
Unicode字符串由字符发送字符过滤或转换,不能显示任何字符。
UWP Windows是不是“正常”的人,他们是直接建立在COM之上,因此如预期一样sendinput USER32功能将无法正常工作。
如果你想支持某种形式的跨应用程序通信,请查看AppServices和以及由斯特凡·威克over at his blog提供的样品。