我需要将文本注入(inject)DirectInput应用程序。我正在使用SendInput,但是使用虚拟键控代码不适用于DirectInput,因此我需要使用Unicode。现在,我不想插入的密钥已在文件中注册为虚拟密钥代码,我需要将它们实时转换为Unicode。

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

这是我的代码字符串。 vk是int中的虚拟键,缓冲区是1个大wchar_t数组。我不能只使用简单的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);

因此,请尝试尝试该操作(如果您不使用C++ 11,则可以使用&keys[0]代替keys.data())。

10-04 21:54