なので、DirectInputでゲームコントローラの処理を書きました。
基本的にC++と同様にやれば動くので
例によって詳細はどこか他サイトを参照してください。
ここではDから使うときのポイントだけ書いておこうと思います。
DirectInputは複数のゲームコントローラを認識出来ますので、
最初にデバイスを列挙することになります。
このとき、IDirectInput8.EnumDevicesを使いますが、
引数の関数ポインタで指定する関数は当然DirectInputから呼ばれますので、定義時に注意が必要です。
具体的にはextern(Windows)を指定します。
| 1 | extern (Windows) | 
|---|---|
| 2 | static | 
| 3 | BOOL enumerateDeviceCallback(const(DIDEVICEINSTANCE)* device, VOID* context) | 
| 4 | { | 
| 5 | // なにがしかの処理 | 
| 6 | } | 
軸の列挙に使用するIDirectInputDevice8.EnumObjectsに指定する関数も同様です。
ちなみに、キーボードいっぱい刺さってたらどうなるんだろう?と思い調べたところ、
全部のキーボードを1つのキーボードとして認識するそうです。(マウスも)
DirectInput の使用方法(MSDN)