winuser.h


ToAscii

La función ToAscii 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 ToAscii(
    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
   );

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.

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 ToAscii 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, ToAscii 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, ToAscii 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).