Мне нужно ввести текст в приложения прямого ввода. Я использую 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...
Он говорит, что массив «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).