RAWKEYBOARD, structure (winuser.h)
Contient des informations sur l’état du clavier.
Syntaxe
typedef struct tagRAWKEYBOARD {
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
USHORT VKey;
UINT Message;
ULONG ExtraInformation;
} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
Membres
MakeCode
Type : USHORT
Spécifie le code d’analyse associé à une touche. Voir les remarques.
Flags
Type : USHORT
Indicateurs pour l’analyse des informations de code. Il peut s’agir d’un ou plusieurs des éléments suivants :
Valeur | Signification |
---|---|
RI_KEY_MAKE 0 | La clé est en panne. |
RI_KEY_BREAK 1 | La clé est en cours. |
RI_KEY_E0 2 | Le code d’analyse a le préfixe E0. |
RI_KEY_E1 4 | Le code d’analyse a le préfixe E1. |
Reserved
Type : USHORT
Réservé; doit être égal à zéro.
VKey
Type : USHORT
Le code de clé virtuelle hérité correspondant.
Message
Type : uiNT
Message de fenêtre de clavier hérité correspondant, par exemple WM_KEYDOWN, WM_SYSKEYDOWN, etc.
ExtraInformation
Type : ULONG
Informations supplémentaires spécifiques à l’appareil pour l’événement.
Remarques
KEYBOARD_OVERRUN_MAKE_CODE est une valeur MakeCode envoyée lorsqu’une combinaison non valide ou non reconnaissable de touches est enfoncée ou que le nombre de touches enfoncées dépasse la limite de ce clavier.
case WM_INPUT:
{
UINT dwSize = sizeof(RAWINPUT);
static BYTE lpb[sizeof(RAWINPUT)];
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEKEYBOARD)
{
RAWKEYBOARD& keyboard = raw->data.keyboard;
WORD scanCode = 0;
BOOL keyUp = keyboard.Flags & RI_KEY_BREAK;
// Ignore key overrun state and keys not mapped to any virtual key code
if (keyboard.MakeCode == KEYBOARD_OVERRUN_MAKE_CODE || keyboard.VKey >= UCHAR_MAX)
return 0;
if (keyboard.MakeCode)
{
// Compose the full scan code value with its extended byte
scanCode = MAKEWORD(keyboard.MakeCode & 0x7f, ((keyboard.Flags & RI_KEY_E0) ? 0xe0 : ((keyboard.Flags & RI_KEY_E1) ? 0xe1 : 0x00)));
}
else
{
// Scan code value may be empty for some buttons (for example multimedia buttons)
// Try to get the scan code from the virtual key code
scanCode = LOWORD(MapVirtualKey(keyboard.VKey, MAPVK_VK_TO_VSC_EX));
}
// Get the key name for debug output
TCHAR keyNameBuffer[MAX_PATH] = {};
GetKeyNameText((LONG)MAKELPARAM(0, (HIBYTE(scanCode) ? KF_EXTENDED : 0x00) | LOBYTE(scanCode)), keyNameBuffer, MAX_PATH);
// Debug output
TCHAR printBuffer[MAX_PATH] = {};
StringCchPrintf(printBuffer, MAX_PATH, TEXT("Keyboard: scanCode=%04x keyName=%s\r\n"), scanCode, keyNameBuffer);
OutputDebugString(printBuffer);
}
...
return 0;
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP [applications de bureau uniquement] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau uniquement] |
d’en-tête | winuser.h (include Windows.h) |
Voir aussi
- GetRawInputDeviceInfo
- RAWINPUT
- d’entrée brute
pilotes clients HID clavier et souris HID - KEYBOARD_INPUT_DATA structure
- d’entrée clavier