Share via


DirectInput について

ここでは、Microsoft DirectInput の基本構造と、Microsoft Windows メッセージ システムと DirectInput の関係について説明します。

ここで説明する DirectInput の各要素の実際の実装方法については、「DirectInput の使用方法」を参照してください。

DirectInput オブジェクト

入力専用の DirectInput の実装は、コンポーネント オブジェクト モデル (COM) インターフェイスである IDirectInput8 インターフェイス をサポートする DirectInput オブジェクトと、データを提供する入力デバイスごとの DirectInputDevice オブジェクトで構成されます。各 DirectInputDevice オブジェクトには、キー、ボタン、軸などの個別のコントロールまたはスイッチであるデバイス オブジェクトがあります。デバイス オブジェクトはデバイス オブジェクト インスタンスとも呼ばれます。

各 DirectInputDevice オブジェクトは、マウス、キーボード、ジョイスティックなどの入力デバイスを表します。DirectInput API では、ジョイスティックという用語は、マウスまたはキーボード以外のすべての種類の入力デバイスを意味します。タッチパッド付きキーボードなど、実際には異なる種類の入力デバイスを組み合わせたハードウェアは、2 つ以上の DirectInputDevice オブジェクトによって表されます。フォース フィードバック デバイスは、入力と出力の両方を処理する 1 つのジョイスティック オブジェクトによって表されます。

DirectInputDevice オブジェクトは IDirectInputDevice8 インターフェイス をインスタンス化します。アプリケーションは、IDirectInputDevice8::EnumObjects メソッドを使用して、使用可能なデバイス オブジェクトの数と種類を確認します。個別のデバイス オブジェクトはコード オブジェクトとしてカプセル化されずに、DIDEVICEOBJECTINSTANCE 構造体で記述されます。

すべての DirectInput インターフェイスは、ANSI および Unicode バージョンで使用できます。コンパイル時に "UNICODE" が定義されている場合は、Unicode バージョンが使用されます。

Windows との相互作用

DirectInput はデバイス ドライバーで直接動作するので、Windows のマウスおよびキーボード メッセージは抑制または無視されます。DirectInput は、ユーザーがコントロール パネルで行ったマウスとキーボードの設定も無視します。ただし、ジョイスティックやその他のゲーム コントローラーに設定されているキャリブレーションは使用します。

DirectInput は、キーボードの文字反復の設定を認識しません。バッファリング データの使用時には、DirectInput はそれぞれの押下と解放を、反復なしの 1 つのイベントとして解釈します。直接データの使用時には、キーの現在の物理的な状態のみに関与し、Windows で解釈されるキーボード イベントには関与しません。

DirectInput は、文字変換や翻訳を実行しません。たとえば、Shift キーは、別のキーの修正子としてではなく、他のキーと同じように処理されます。キーは、ユーザーのシステム言語設定に関係なく、同じ識別子を返します。

Windows 2000 では、排他モードでキーボードを取得すると、その後で起動されたどのアプリケーションもキーボード データを受け取ることができなくなります。

DirectInput はマウス ドライバーで直接動作するので、ウィンドウ アプリケーションについてマウス データを解釈する Windows のサブシステムをバイパスします。ナビゲーションに Windows カーソルを使用するアプリケーションは、標準の Windows マウス メッセージおよび Microsoft Win32 関数を引き続き使用する必要があります。

排他モードでシステム マウスを使用すると、DirectInput はマウス メッセージを抑制するため、Windows は標準カーソルを表示できません。

DirectInput は、加速やボタン機能の入れ替えなどのコントロール パネルの設定を無視します。ただし、ドライバー自体で設定を認識します。たとえば、ユーザーが 3 つボタンのマウスを持っていて、ドライバー ユーティリティ ソフトウェアを使用して中央のボタンをダブルクリックのショートカットとして設定した場合、DirectInput は、中央のボタンの 1 回のクリックを主ボタンの 2 回のクリックとして報告します。