带有Unicode字符串的SendInput无法正确发送到Windows 10的UWP应用中

时间:2019-02-01 14:36:56

标签: windows uwp windows-10 sendinput

感谢Windows XP和Windows 7上的SendInput API,我有一个用于发送unicode字符串(而不是击键)的应用程序。我在Windows 10上进行了尝试,并注意到如果目标应用程序是UWP(例如Edge,OneNote,等等),Unicode字符串并非总是正确处理。例如,如果应用程序使用“ hello”字符串调用SendInput,则应用程序将显示“ hello”,“ he”,甚至什么都不显示。 感谢您的建议

以下是基于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字符串由char发送给char,以过滤或转换任何无法显示的char。

1 个答案:

答案 0 :(得分:0)

UWP Windows不是“普通”的Windows,它们直接建立在COM之上,因此 user32 之类的功能(如sendinput)将无法正常工作。

如果您想支持某种跨应用程序通信,请查看AppServices以及Stefan Wick over at his blog提供的示例。