ToAscii

ToAscii, ToAsciiEx

VB声明

Declare Function ToAscii& Lib "user32" (ByVal uVirtKey As Long, ByVal uScanCode As Long, lpbKeyState As Byte, lpwTransKey As Integer, ByVal fuState As Long)

Declare Function ToAsciiEx& Lib "user32" (ByVal uVirtKey As Long, ByVal uScanCode As Long, lpKeyState As Byte, lpwTransKey As Integer, ByVal fuState As Long, ByVal dwhkl As Long)

说明

根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符

返回值

Long,负值表明按键是“死”的——不能自己将自己转换成一个字符(重音键[accent keys]就是一个例子)。在给定当前键盘状态的前提下,如按键不能被转换(翻译),则返回0。如单个字符已载入lpwTransKey,则返回1。如lpwTransKey里已载入了两个字符(需要把它分隔到两个字节里),那么返回值是2。在当前字符集里,倘若单独一个字符不能表达键盘支持的死键或重音按键组合,就可能得到2的返回值

参数表

参数

类型及说明

uVirtKey

Long,欲转换的虚拟键

uScanCode

Long,键的扫描码。如键处于抬起状态,会设置高位(设为1);如按下,则清除高位(设为0)

lpbKeyState

Byte,描述了键盘状态的一个256字符数组的第一个条目。参考GetKeyboardState函数,了解关于这个数组更多的情况

lpwTransKey

Integer,用于装载转换过后的字符的一个整数变量。可用 chr()函数将这个值转换成一个字串

fuState

Long,如一个菜单处于活动状态,则设为1

dwhkl

Long,欲用于转换的一个键盘布局的句柄

注解

NumLock键的状态会被忽略,因为虚拟键码包括了哪个信息

在微软的win32手册里,对ToAsciiEx函数的建议是将它的lpwTransKey参数设为Long,而不要设为Integer。这里的函数声明根据实际的C语言头,它将参数定义成一个16位的字(既vb的整数)

Top