RAWKEYBOARD 構造体 (winuser.h)
キーボードの状態に関する情報が含まれています。
構文
typedef struct tagRAWKEYBOARD {
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
USHORT VKey;
UINT Message;
ULONG ExtraInformation;
} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
メンバーズ
MakeCode
型: USHORT
キー押下に関連付けられている スキャン コード を指定します。 「解説」を参照してください。
Flags
型: USHORT
スキャン コード情報のフラグ。 次の 1 つ以上を指定できます。
価値 | 意味 |
---|---|
RI_KEY_MAKE 0 | キーがダウンしています。 |
RI_KEY_BREAK 1 | キーが起動しています。 |
RI_KEY_E0 2 | スキャン コードには E0 プレフィックスが付いています。 |
RI_KEY_E1 4 | スキャン コードには E1 プレフィックスが付いています。 |
Reserved
型: USHORT
引っ込み思案;は 0 にする必要があります。
VKey
型: USHORT
対応する レガシ仮想キー コード。
Message
型: UINT
ExtraInformation
型: ULONG
イベントのデバイス固有の追加情報。
備考
KEYBOARD_OVERRUN_MAKE_CODE は、無効なキーまたは認識できないキーの組み合わせが押された場合、または押されたキーの数がこのキーボードの制限を超えた場合に送信される特別な MakeCode 値です。
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;
}
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ヘッダー | winuser.h (Windows.h を含む) |
関連項目
- GetRawInputDeviceInfo の
- RAWINPUT の
- 生入力 を
する - キーボードおよびマウス HID クライアント ドライバー
- KEYBOARD_INPUT_DATA 構造体の
- キーボード入力