无法从虚拟密钥代码转换为unicode

时间:2014-08-06 01:07:07

标签: c++ winapi unicode sendinput directinput

我需要将文本注入directinput应用程序。我正在使用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 个答案:

答案 0 :(得分:0)

它说“keys”数组是可选的,但除非我传入一个键,否则我也得到零结果。也许他们只是意味着你可以选择让它工作吗?

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

如果您不使用C ++ 11,请尝试(或&keys[0]代替keys.data()。)