ToAsciiEx
[Now
Supported on Windows NT]
The ToAsciiEx
function translates the specified virtual-key code and keyboard state to the
corresponding Windows character or characters. The function translates the code
using the input language and physical keyboard layout identified by the given
keyboard layout handle.
int ToAsciiEx(
UINT uVirtKey, |
//
virtual-key code |
UINT uScanCode, |
// scan
code |
PBYTE lpKeyState, |
// address
of key-state array |
LPWORD lpChar, |
// buffer
for translated key |
UINT uFlags, |
//
active-menu flag |
HKL dwhkl |
// keyboard
layout handle |
); |
|
Parameters
uVirtKey
Specifies the
virtual-key code to be translated.
uScanCode
Specifies the
hardware scan code of the key to be translated. The high-order bit of this
value is set if the key is up (not pressed).
lpKeyState
Points to a 256-byte
array that contains the current keyboard state. Each element (byte) in the
array contains the state of one key. If the high-order bit of a byte is set,
the key is down (pressed).
The low bit,
if set, indicates that the key is toggled on. In this function, only the toggle
bit of the CAPS LOCK key is relevant. The toggle state of the NUM LOCK and SCROLL LOCK keys
is ignored.
lpChar
Points to the
buffer that will receive the translated Windows character or characters.
uFlags
Specifies
whether a menu is active. This parameter must be 1 if a menu is active, zero
otherwise.
dwhkl
Identifies
the keyboard layout to use to translate the given code. This parameter can be
any keyboard layout handle previously returned by the LoadKeyboardLayout
Return Values
If the
specified key is a dead key, the return value is negative. Otherwise, it is one
of the following values:
Value |
Meaning |
0 |
The
specified virtual key has no translation for the current state of the
keyboard. |
1 |
One Windows
character was copied to the buffer. |
2 |
Two
characters were copied to the buffer. This usually happens when a dead-key
character (accent or diacritic) stored in the keyboard layout cannot be
composed with the specified virtual key to form a single character. |
Remarks
The
parameters supplied to the ToAsciiEx function might not be sufficient to
translate the virtual-key code, because a previous dead key is stored in the
keyboard layout.
Typically, ToAsciiEx
performs the translation based on the virtual-key code. In some cases, however,
bit 15 of the uScanCode parameter may be used to distinguish between a
key press and a key release. The scan code is used for translating ALT+number
key combinations.
Although NUM LOCK is a
toggle key that affects keyboard behavior, ToAsciiEx ignores the toggle
setting (the low bit) of lpKeyState (VK_NUMLOCK, because the uVirtKey
parameter alone is sufficient to distinguish the cursor movement keys (VK_HOME,
VK_INSERT, and so on) from the numeric keys (VK_DECIMAL, VK_NUMPAD0 -
VK_NUMPAD9).
See Also