SendInput со строкой Unicode, неправильно отправленной в приложение UWP в Windows 10 - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть приложение, которое использовало для отправки строки Unicode (не нажатия клавиш) благодаря API SendInput в Windows XP и Windows 7. Я попробовал его в Windows 10 и заметил, что если целевым приложением является UWP (например, Edge, 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 отправляется char символом для фильтрации или преобразования любого символа, который не может быть отображен.

1 Ответ

0 голосов
/ 01 февраля 2019

UWP Windows не являются «обычными», они построены непосредственно над COM, поэтому user32 функции, такие как sendinput, не будут работать должным образом.

Если вы хотите поддерживать некоторыевид связи между приложениями, пожалуйста, ознакомьтесь с AppServices , а также с примерами, предоставленными Стефаном Виком в его блоге .

...