Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Enthält Informationen zum Zustand der Tastatur.
Syntax
typedef struct tagRAWKEYBOARD {
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
USHORT VKey;
UINT Message;
ULONG ExtraInformation;
} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
Angehörige
MakeCode
Typ: USHORT-
Gibt den Scancode an, einem Tastendruck zugeordnet ist. Siehe Anmerkungen.
Flags
Typ: USHORT-
Kennzeichnungen für Scancodeinformationen. Dies kann eine oder mehrere der folgenden Aktionen sein:
| Wert | Bedeutung |
|---|---|
| RI_KEY_MAKE 0 | Die Taste ist nach unten. |
| RI_KEY_BREAK 1 | Der Schlüssel ist nach oben. |
| RI_KEY_E0 2 | Der Scancode weist das Präfix E0 auf. |
| RI_KEY_E1 4 | Der Scancode weist das Präfix E1 auf. |
Reserved
Typ: USHORT-
Reserviert; muss null sein.
VKey
Typ: USHORT-
Der entsprechende legacy virtual-key code.
Message
Typ: UINT-
Die entsprechende älteren Tastaturfenstermeldung, z. B. WM_KEYDOWN, WM_SYSKEYDOWNusw.
ExtraInformation
Typ: ULONG-
Die gerätespezifischen zusätzlichen Informationen für das Ereignis.
Bemerkungen
KEYBOARD_OVERRUN_MAKE_CODE ist ein spezieller MakeCode Wert gesendet, wenn eine ungültige oder nicht erkennbare Tastenkombination gedrückt wird oder die Anzahl der gedrückten Tasten den Grenzwert für diese Tastatur überschreitet.
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;
}
Anforderungen
| Anforderung | Wert |
|---|---|
| mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
| mindestens unterstützte Server- | Windows Server 2003 [Nur Desktop-Apps] |
| Header- | winuser.h (enthalten Windows.h) |