Microsoft DirectX 8.0 (Visual Basic)

デバイス オブジェクトの列挙

デバイス上でどのボタンまたは軸が使用可能であるかを、アプリケーションが確認しなければならない場合がある。この確認を行うには、デバイスを列挙する場合とほぼ同じ方法でデバイス オブジェクトを列挙する。

 :  デバイス ドライバによる制約のため、キーボードのキーおよびインジケータ ライトの列挙は信頼できない。オブジェクトが存在するかのような偽りの報告が行われる場合がある。使用可能なキーに関する基本的情報は、デバイスのサブタイプから取得できるが、メニュー キーなどの追加オブジェクトが使用可能かどうかを判定するには、ユーザーに入力を求める以外、方法はない。

DirectInputDevice8.GetDeviceObjectsEnum を呼び出すことで、デバイス オブジェクトを列挙する。これにより、要求したパラメータに一致する使用可能なデバイス オブジェクトのコレクションを表す DirectInputEnumDeviceObjects クラスのインスタンスが返される。

以下のコードは、デバイス上の軸を列挙する例である。

' diDev は DirectInputDevice オブジェクトである。
 
Dim diEnumObjects As DirectInputEnumDeviceObjects
Set diEnumObjects = diDev.GetDeviceObjectsEnum(DIDFT_AXIS)

パラメータは、列挙の中に含めるオブジェクトのタイプ (複数可) を示すフラグ (この例では 1 つ) である。

 :  CONST_DIDFTFLAGS フラグの一部は、ほかのフラグを組み合わせたものである。たとえば、DIDFT_AXIS は、DIDFT_ABSAXIS OR DIDFT_RELAXIS と同等である。

特定のデバイス オブジェクトに関する情報を取得するには、DirectInputDeviceObjectInstance オブジェクトの各メソッドを呼び出す。このオブジェクトは、DirectInputEnumDeviceObjects.GetItem を呼び出すことで取得される。利用可能なデバイスの情報には、デバイスの名前、タイプ、およびデータ構造体内でのオフセットなどがある。

以下のコードは、前例で列挙された軸の名前をリストする例である。

Dim diDevObjInstance As DirectInputDeviceObjectInstance
Dim i As Integer
For i = 1 To diEnumObjects.GetCount
  Set diDevObjInstance = diEnumObjects.GetItem(i)
  Call List1.AddItem(diDevObjInstance.GetName)
Next i