Platform SDK: DirectX

DirectInput デバイスの作成

デバイスから入力データを取得するには、まずそのデバイスを表すオブジェクトを作成しなければならない。

[C++]

IDirectInput7::CreateDeviceEx メソッドを使って、IDirectInputDevice7 インターフェイスへのポインタを取得する。その後、このインターフェイスのメソッドを使って、デバイスの操作とデータの取得を行う。

次のコードは、キーボード デバイスを作成する例である。lpdi IDirectInput7 インターフェイスへのポインタである。

LPDIRECTINPUTDEVICE7  lpdiKeyboard; 
lpdi->CreateDeviceEx(GUID_SysKeyboard, IID_IDirectInputDevice7,
(void**)&lpdiKeyboard, NULL); 

IDirectInput7::CreateDeviceEx の最初のパラメータはインスタンス GUID であり、インターフェイスの作成対象デバイスのインスタンスを識別する。DirectInput には、事前定義された 2 つの GUID (GUID_SysMouse および GUID_SysKeyboard) があり、それぞれシステム マウスとシステム キーボードを表す。これらの識別子を CreateDeviceEx メソッドに渡すことができる。CreateDeviceEx メソッドのパラメータとして、グローバル変数の GUID_Joystick を使用してはならない。GUID_Joystick は製品 GUID であり、インスタンス GUID ではないからである。

 :  ワークステーションに 2 つ以上のマウスがある場合は、すべてのマウスが結合されてシステム デバイスを形成する。キーボードについても同様である。

DirectInput は、このほかにも主にテストに使用する事前定義された 4 つの GUID を用意している。これらは GUID_SysKeyboardEm、GUID_SysKeyboardEm2、GUID_SysMouseEm、および GUID_SysMouseEm2 である。この GUID の 1 つを CreateDeviceEx に渡すことで、列挙レイヤーを介して、システム キーボードやシステム マウスに対するレベル 1 またはレベル 2 のアクセス権が付与される。これらの GUID は、常にシステム マウスやシステム キーボードを表す。これらはGUID_SysKeyboard および GUID_SysMouse のエイリアスであり、DIEDFL_INCLUDEALIASES フラグが渡されなければ、IDirectInput7::EnumDevices では列挙されない。

システム マウスまたはシステム キーボード以外のデバイスの場合は、IDirectInput7::EnumDevices で返されるデバイスのインスタンス GUID を使用する。1 つのデバイスに対するインスタンス GUID は常に同一である。列挙したリストからユーザーに 1 つのデバイスを選択させ、その GUID を構成ファイルに保存しておくと、後のセッションでその GUID を再び使用することができる。

[Visual Basic]

DirectInput.CreateDevice メソッドを使って、DirectInputDevice オブジェクトを取得する。その後、このインターフェイスのメソッドを使って、デバイスの操作とデータの取得を行う。

次のコードは、キーボード デバイスを作成する例である。di DirectInput オブジェクトである。

Dim diDev As DirectInputDevice
Set diDev = di.CreateDevice("GUID_SysKeyboard")

パラメータは GUID のエイリアスであり、インターフェイスの作成対象デバイスのインスタンスを識別する。DirectInput には、事前定義された 2 つの GUID (GUID_SysMouse および GUID_SysKeyboard) があり、それぞれシステム マウスとシステム キーボードを表す。これらの識別子を CreateDevice メソッドに渡すことができる。

 :  ワークステーションに 2 つ以上のマウスがある場合は、すべてのマウスが結合されてシステムデバイスを形成する。キーボードについても同様である。

システム マウスやシステム キーボード以外のデバイスの場合は、DirectInputDeviceInstance.GetGuidInstance から取得したデバイスのインスタンス GUID を使用する。1 つのデバイスに対するインスタンス GUID は常に同一である。列挙したリストからユーザーに 1 つのデバイスを選択させ、その GUID を構成ファイルに保存しておくと、後のセッションでその GUID を再び使用することができる。

次のサンプル コードは、アプリケーションがデバイスを列挙し、適切なデバイス diDevInstance を見つけたことを前提としている。このデバイスを DirectInputDevice として作成する。

Dim guid As String
guid = diDevInstance.GetGuidInstance
Set diDev = di.CreateDevice(guid)

DirectInputDeviceInstance オブジェクトの取得方法については、「DirectInput デバイスの列挙」を参照すること。