winuser.h


ToUnicode

La función ToUnicode traduce el código de tecla virtual especificado y el estado de teclado al carácter o caracteres Unicode correspondientes.

Sintaxis

int ToUnicode(
    UINT uVirtKey,     // código de tecla virtual
    UINT uScanCode,    // código de escaneo
    PBYTE lpKeyState,  // dirección de array de estados de teclas
    LPWSTR pwszBuff,   // buffer para tecla traducida
    int cchBuff,       // tamaño del buffer de tecla traducida
    UINT wFlags        // conjunto de banderas de condiciones
   );

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.

pwszBuff: apunta al buffer que recibe el carácter o caracteres Unicode traducidos.

cchBuff: especifica el tamaño en caracteres del buffer apuntado por el parámetro pwszBuff.

wFlags: un conjunto de banderas de bits que condicionan el comportamiento de la función. Activar el bit 0 si un menú está activo. Los bits 1 a 31 están reservados.

Valor de retorno

La función devuelve uno de los siguientes valores:

Valor Significado
-1 La tela virtual especificada es un carácter de tecla "muerta" (acento o diéresis). Este valor se devuelve independientemente del diseño de teclado, aunque varios caracteres hayan sido tecleados y almacenados en el estado del teclado. Si fue posible, con diseños de teclado Unicode, la función escribió una versión con espacio del carácter de tecla "muerta" al buffer especificado por pwszBuffer. Por ejemplo, la función escribe el carácter SPACING ACUTE (0x00B4), en lugar del carácter NON_SPACING ACUTE (0x0301).
0 La tecla virtual especificada no tiene traducción para el estado actual del teclado. Nada se escribe en el buffer especificado por pwszBuffer.
1 Se ha copiado un carácter al buffer apuntado por pwszBuff.
2 ó más Se copiaron dos o más caracteres al buffer especifiado por pwszBuff. La causa más frecuente para esto es que un carácter de tecla muerta (acento o diéresis) almacenado en el diseño del teclado no puede ser combinado con la tecla virtual especificada para formar un único carácter.

Observaciones

Los parámetros suministrados a la función ToUnicode 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, ToUnicode 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.