Platform SDK: DirectX

キーボードの直接データ

[C++]

キーボードの現在の状態を取得するには、戻り値データを保持する 256 バイトの配列へのポインタを指定して、IDirectInputDevice7::GetDeviceState メソッドを呼び出す。

GetDeviceState メソッドは、Win32 GetKeyboardState 関数と同様に動作し、キーボードの現在の状態のスナップショットを返す。各キーは、256 バイトの配列内の 1 バイトによって表される。配列のアドレスは、lpvData パラメータとして渡されたものである。バイトの上位ビットが設定されている場合、キーは押した状態にある。配列は最も便利なように、DirectInput キーボード デバイス定数によりインデックスが付けられている (「キーボード データの解釈」も参照すること)。

以下のコードは、Esc キーの押下に応じて何らかの処理を行う例である。

// LPDIRECTINPUTDEVICE lpdiKeyboard; // 前もって初期化され、
// 取得されている。
 
BYTE diKeys[256];
if (lpdiKeyboard->GetDeviceState(256, diKeys) == DI_OK)
{ 
if (diKeys[DIK_ESCAPE] & 0x80) DoSomething();
} 
[Visual Basic]

キーボードの現在の状態を取得するには、DIKEYBOARDSTATE 型を指定して DirectInputDevice.GetDeviceStateKeyboard を呼び出す。

GetDeviceState メソッドは、キーボードの現在の状態のスナップショットを返す。各キーは、DIKEYBOARDSTATE 型を構成する 256 バイトの配列内の 1 バイトによって表される。バイトの上位ビットが設定されていると、キーは、ダウン状態にある。配列は最も便利なように、CONST_DIKEYFLAGS 列挙のメンバによりインデックスが付けられている (「キーボード データの解釈」も参照すること)。

以下のコードは、現在 Esc キーが押下されているかどうかを判定する例である。

' objDIDev は DirectInputDevice オブジェクトである。
Dim dev As DirectInputDevice
Dim KeyState As DIKEYBOARDSTATE
 
Call objDIDev.GetDeviceStateKeyboard(KeyState)
If (KeyState.Key(DIK_ESCAPE) And &H80) Then
' キーは押下されている。
End If