无法从虚拟键代码转换为 unicode

Can't convert from virtual key code to unicode

本文关键字:转换 unicode 代码 虚拟      更新时间:2023-10-16

我需要向directinput应用程序注入文本。我正在使用SendInput,但是使用虚拟键代码不能与directinput一起工作,所以我需要使用Unicode。现在,我不想注入的键被注册在一个文件中作为虚拟键代码,我需要将它们实时转换为Unicode。

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

这是我的代码字符串。Vk是int类型中的虚拟键,而buffer是一个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)。