### 函数功能

该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。

### 函数原型

int ToAscii(UINT uVirtKey,UINT uScanCode；PBYTE lpKeyState,LPWORD lpChar,UINT uFlags);

### 参数

nVirtkey：指定要翻译的虚拟键码。
uScanCode：定义被翻译键的硬件扫描码。若该键处于up状态，则该值的最高位被设置。
LpKeyState：指向包含当前键盘状态的一个256字节数组。数组的每个成员包含一个键的状态。若某字节的最高位被设置，则该键处于down状态。若最低位被设置，则表明该键被触发。在此函数中，仅有capslock键的触发位是相关的。NumloCk和scroll loCk键的触发状态将被忽略。
LpChar：指向接受翻译所得字符或字符串的缓冲区。
UFlags：定义一个菜单是否处于激活状态。若一菜单是活动的，则该参数为1，否则为0。

### 返回值

若定义的键为死键，则返回值为负值。否则，返回值应为如下的值：
O：对于当前键盘状态，所定义的虚拟键没有翻译。
1：一个字符被拷贝到缓冲区。
2：两个字符被拷贝到缓冲区。当一个存储在键盘布局中的死键（重音或双音字符）无法与所定义的虚拟键形成一个单字符时，通常会返回该值。
备注：若键盘布局中原先存放了一个死键，则提供给ToAscii函数的参数可能不足以翻译虚拟键码。
典型地，ToAscii函数执行基于虚拟键码的翻译。然而，在某些情况下，uScanCode参数的第15位可能被用来区分一个键的按下状态和释放状态。扫描码用于翻译Alt+数字键的键组合。
尽管NUMLOCK事实影响键盘状态的触发键，TOAscii将忽略lpKeyState的触发设置（VK_NUMLOCK），因为仅uVirtKey参数就足以区分光标移动键（VL_HOME，INSERT,等等）和数字键（VK_DECIMAL，VK_NUMPADO_VK_NUMPAD9）。

### 速查

Windows NT：3.1及以上版本；Windows：95及以上版本；Wiodows CE：不支持；头文件：Winuser.h；库文件：user32.lib。