我正在尝试使用VkKeyScanW函数将字符转换为相应的虚拟键代码。它适用于ASCII字符,但在传递unicode字符(中文/俄文字符)时失败。
short vcode = VkKeyScanW(ch); //ch is of wchar_t type;
cout<<"key code:"<<vcode<<endl; //always prints -1 for unicode characters.
我在这里做错了什么?有没有其他方法可以实现它?我想将虚拟键代码传递给SendInput函数。
答案 0 :(得分:2)
将字符转换为相应的虚拟键代码,并将状态转换为当前键盘。
...
返回值
...
如果函数找不到转换为传递的字符代码的键,则低位和高位字节都包含-1。
很明显,它无法在当前键盘布局中找到您传递的Unicode字符的匹配键码。
请尝试使用LoadKeyboardLayout()
和VkKeyScanEx()
,确保选择中文/俄文键盘布局。
另请注意,VkKeyScanW()
和VkKeyScanExW()
仅接受1 WCHAR
作为输入,但像中文这样的语言通常需要2个WCHAR
值作为代理对以形成Unicode字符。这些字符不适用于VkKeyScan/Ex()
。
话虽如此,您不需要将Unicode字符转换为虚拟键码以便使用SendInput()
。它可以使用KEYEVENTF_UNICODE
标志直接接受Unicode字符。对于代理对,您只需指定两个输入事件,每个WCHAR
一个。