Не удается преобразовать код виртуальной клавиши в кодировку Unicode

Мне нужно ввести текст в приложения прямого ввода. Я использую SendInput, но использование кодов виртуальных клавиш не работает с directinput, поэтому мне нужно использовать Unicode. Теперь ключи, которые я не хочу вводить, регистрируются в файле как коды виртуальных ключей, и мне нужно преобразовать их в Unicode в режиме реального времени.

return1 = ToUnicode(vk, MapVirtualKey(vk, MAPVK_VK_TO_VSC), NULL, buffer, 1, 0);

Это моя строка кода. vk — это виртуальный ключ в int, а буфер — это wchar_t массив большой 1 ед. Я не мог использовать просто wchar_t потому что это не работает с ToUnicode.
Однако эта функция просто возвращает 0 каждый раз, что означает, что функция не смогла перевести ключ.
Для записи, я использую стандартные ключи, такие как «wasd», никаких специальных символов.
Если кто-нибудь может понять, почему это происходит, я бы очень хотел помочь.

Спасибо за внимание!

РЕДАКТИРОВАТЬ: также, было бы удобно просто бороться с моей ленью и написать какой-то старый переключатель и сломать, чтобы преобразовать значения? например.

wchar_t unicode;
switch (vk)
case '0x30':
unicode = '48';
//ecc...

1

Решение

Он говорит, что массив «keys» является необязательным, но если я не передам ключи, я тоже получу нулевой результат. Может быть, они просто означают, что у вас есть возможность заставить это работать или нет?

std::vector<BYTE> keys(256, 0);
int sc = MapVirtualKey(vk, MAPVK_VK_TO_VSC);
return1 = ToUnicode(vk, sc, keys.data(), buffer, 1, 0);

Так что попробуйте (или &keys[0] вместо keys.data() если вы не используете C ++ 11).

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector