ToAsciiEx
[Ahora soportado en Windows NT]
La función ToAsciiEx traduce el código de tecla virtual especificado y el estado del teclado al correspondiente carácter o caracteres Windows. La función traduce el código usando el lenguaje de entrada y el diseño de teclado físico identificado por el manipulador dado.
Sintaxis
int ToAsciiEx( UINT uVirtKey, // código de tecla virtual UINT uScanCode, // código de escaneo PBYTE lpKeyState, // dirección de array de estados de teclas LPWORD lpChar, // buffer para la tecla traducida UINT uFlags, // bandera de menú activo HKL dwhkl // manipulador de diseño de teclado );
Parámetros
uVirtKey: especifica el código de tecla virtual a traducir.
uScanCode: especifica el código de escaneo hardware de la tecla a traducir. El bit de mayor peso de este valor está activo si la tecla no está presionada.
lpKeyState: apunta a un array de 256 bytes que contiene el estado actual del teclado. Cada elemento (byte) del array contiene el estado de una tecla. Si el bit de mayor peso de un byte está activo, la tecla estará pulsada.
El bit de menor peso, si está pulsado, indica que la tecla tiene el bloqueo activado. En esta función, sólo el bit de bloqueo de la tecla de bloqueo de mayúsculas es relevante. El estado de bloqueo del teclado numérico y del desplazamiento se ignora.
lpChar: apunta al buffer que recibirá el carácter o caracteres Windows traducidos.
uFlags: especifica si un menú está activo. Este parámetro debe ser 1 si un menú está activo, ó 0 en cualquier otro caso.
dwhkl: identifica el diseño de teclado a usar para traducir el código dado. Este parámetro puede ser cualquier manipulador de diseño de teclado devuelto previamente por la función LoadKeyboardLayout.
Valor de retorno
Si la tecla especifica en una tecla "muerta", el valor de retorno es negativo. En otro caso, será uno de los siguientes valores:
Valor | Significado |
---|---|
0 | La tecla virtual especificada no tiene traducción para el estado actual del teclado. |
1 | Se ha copiado un carácter Windows en el buffer. |
2 | Se han copiado dos caracteres al buffer. Esto ocurre normalmente cuando un carácter de tecla "muerta" (un acento o diéresis) almacenado en el diseño del teclado no puede combinarse con la tecla virtual especificada para formar un único carácter. |
Observaciones
Los parámetros suministrados a la función ToAsciiEx pueden ser insuficientes para traducir el código de tecla virtual, porque una tecla "muerta" previa esté almacenada en el diseño del teclado.
Típicamente, ToAsciiEx realiza la traducción basada en el código de tecla virtual. En algunos casos, sin embargo, el bit 15 del parámetro uScanCode puede ser usado para distinguir entre una pulsación y una liberación. El código de escaneo se usa para traducir combinaciones de tecla ALT+número.
Aunque el bloqueo del teclado numérico (NUM LOCK) es una tecla de bloqueo que afecta al comportamiento del teclado, ToAsciiEx ignora el estado de bloqueo (el bit de menor peso) def lpKeyState, VK_NUMLOCK, porque el parámetro uVirtKey solo es suficiente para distinguir las teclas del movimiento del cursor (VK_HOME, VK_INSERT, etc.) de las teclas del teclado numérico (VK_DECIMAL, VK_NUMPAD0 - VK_NUMPAD9).