Как использовать функцию SendInput() для отправки символов Юникода размером более 2 байтов? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как использовать функцию SendInput() для отправки символов Юникода размером более 2 байтов? [дубликат]

Сообщение Anonymous »

Я пытался использовать функцию SendInput() для имитации ввода с клавиатуры символов Юникода размером более 2 байтов. Я могу отправлять такие символы, как ∇ : 0x2207, используя структуру INPUT:

Код: Выделить всё

INPUT puts[1] = { };
puts[0].type = INPUT_KEYBOARD;
puts[0].ki.dwFlags = KEYEVENTF_UNICODE;
puts[0].ki.wScan = 0x2207;

SendInput(1, puts, sizeof(puts));
Однако, когда я пытаюсь отправить что-то вроде 0x1D495, мой символ усекается до 0xD495, поскольку член wScan KEYBDINPUT (

Код: Выделить всё

INPUT.ki
) имеет тип WORD, размер которого составляет всего 2 байта.
У меня нет опыта работы с API Win32, но я пытался обойти SendInput()) code> на свой страх и риск, используя SendMessage(), но я не уверен, что смогу сделать это без более формальных знаний. Я пытался найти исходный код SendInput(), чтобы посмотреть, смогу ли я сделать больше без него, но ничего особенного не нашел.
Эта тема Как использовать расширенные сканкоды в SendInput решает тот же вопрос, но мне не удалось решить свою проблему, поскольку я не уверен, какими будут подразумеваемые значения tscancode, tvk и dwFlags. Какая-то комбинация KEYEVENTF_EXTENDEDKEY, но я не смог разобраться.

Подробнее здесь: https://stackoverflow.com/questions/786 ... an-2-bytes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»