ToAscii功能将指定的虚拟键代码和键盘状态转换为相应的Windows字符或字符。该函数使用由给定的键盘布局句柄标识的输入语言和物理键盘布局来转换代码。
int Tocicii
UINT 【uVirtKey】, | //虚拟键代码 |
UINT 【uScanCode】, | //扫描代码 |
PBYTE 【lpKeyState】, | //键状态数组的地址 |
LPWORD 【lpChar】, | //用于翻译的键缓冲区 |
UINT 【uFlags】 | //活动菜单标志 |
); |
参数
【uVirtKey】
指定要翻译的虚拟键代码。
【uScanCode】
指定要翻译的键的硬件扫描代码。如果键已经起作用(未按下),则该值的高位被置位。
【lpKeyState】
指向包含当前键盘状态的256字节数组。数组中的每个元素(字节)包含一个键的状态。如果设置了一个字节的高位,则该键被按下(按下)。
低位,如果设置,表示该键被切换。在此函数中,只有CAPS LOCK键的切换位相关。NUM LOCK和SCROLL LOCK键的切换状态将被忽略。
【lpChar】
指向将接收翻译的Windows字符或缓冲区的缓冲区。
【uFlags】
指定菜单是否处于活动状态。如果菜单处于活动状态,此参数必须为1,否则为0。
返回值
如果指定的键是死键,则返回值为负。否则,它是以下值之一:
值 | 含义 |
0 | 指定的虚拟键对于键盘的当前状态没有转换。 |
1 | 一个Windows字符被复制到缓冲区。 |
2 | 两个字符被复制到缓冲区。这通常发生在存储在键盘布局中的死键字符(口音或变音符)不能用指定的虚拟键组成以形成单个字符。 |
备注
提供给ToAscii功能的参数可能不足以翻译虚拟键代码,因为之前的死锁存储在键盘布局中。
通常,ToAscii根据虚拟键代码执行翻译。然而,在某些情况下,【uScanCode】参数的第15位可用于区分按键和键释放。扫描码用于翻译ALT + 【数字键】组合。
虽然NUM LOCK是影响键盘行为的切换键,ToAscii忽略【lpKeyState】的切换设置(低位)(VK_NUMLOCK,因为【uVirtKey】参数单独足以区分光标移动键(VK_HOME,VK_INSERT ,等等)从数字键(VK_DECIMAL,VK_NUMPAD0 - VK_NUMPAD9)。
也可以看看