Share via


プログラミングのヒントとツール

このトピックでは、次のような詳細なプログラミングのヒントについて説明します。

  • 旧バージョンの DirectInput に対応する設計

  • デバッグ時の応答遅延の解消

  • レジストリ キーの重複の回避

旧バージョンの DirectInput に対応する設計

DirectInput8CreateIDirectInput8::InitializeIDirectInputDevice8::Initialize、および IDirectInputEffect::Initialize の各メソッドでは、DirectInput のバージョン番号を渡す必要があります。このパラメーターは、DirectInput サブシステムがエミュレートする DirectX のバージョンを指定します。

DirectInput の最新バージョンに対応するように設計されたアプリケーションは、Dinput.h で定義されている値 DIRECTINPUT_VERSION を渡す必要があります。

旧バージョンで実行するように設計されたアプリケーションは、設計対象の DirectInput のバージョンに相当する値を渡す必要があります (上位バイトにメイン バージョン番号を指定)。たとえば、DirectInput 3.0 で実行するように設計されたアプリケーションは、値 0x0300 を渡します。

Dinput.h ヘッダー ファイルをインクルードする前に DIRECTINPUT_VERSION を 0x0300 に定義すると、DirectInput 3.0 互換の構造体定義がヘッダー ファイルによって生成されます。

Dinput.h ヘッダー ファイルをインクルードする前に DIRECTINPUT_VERSION を定義しない場合、DirectInput の現行バージョンに互換する構造体定義がヘッダー ファイルによって生成されます。ただし、名前に "_DX3" が付加された DirectX 3 互換の構造体も利用できます。たとえば、DirectX 3 互換の DIDEVCAPS 構造体は、DIDEVCAPS_DX3 という名前です。

また、DirectInput インターフェイスと DirectInputDevice インターフェイスの適切なバージョンを使用する必要があります。DirectX 7.0 より前のバージョンの DirectX では、IDirectInput および IDirectInputDevice または IDirectInputDevice2 のどちらかを使用する必要があります (IDirectInputDevice2 は DirectX 5.0 以降で使用可能)。

デバッグ時の応答遅延の解消

Microsoft Windows 2000 環境で DirectInput にキーボードまたはマウスを使用する場合は、デバッグ セッション中にコードをステップ実行するとき、応答に少し遅延が感じられることがあります。この動作はデバッグ モードでのみ発生するので、アプリケーションのエンド ユーザーが遅延を感じることはありません。ただし、次のレジストリ キーにエミュレーション値を追加することによって、デバッグ モードでもこの遅延を解消できます。

HKEY_LOCAL_MACHINE
    SOFTWARE
        Microsoft
            DirectInput
名前 データ
エミュレーション DWORD 0x08 (キーボードの場合)

0x10 (マウスの場合)

0x18 (両方の場合)

また、次の手順で、DirectX コントロール パネルからエミュレーションを使用するように切り替えることもできます。

  1. Windows コントロール パネルを開きます。
  2. DirectX コントロール パネルを開きます。Microsoft Windows XP を使用している場合は、[クラシック表示に切り替える] をクリックしないと DirectX アイコンが表示されない場合があります。
  3. [DirectInput] タブを選択します。
  4. [Debug Input Device Emulation] セクションで、[Emulate Keyboard] ボックスと [Emulate Mouse] ボックスをオンにすることができます。

この値を指定すれば、DirectInput がデータを返す方法を変更せずに、この遅延の影響を受けにくいエミュレーション モードを呼び出すことができます。これらの設定はグローバルで、すべての DirectInput クライアントに影響します。パフォーマンスが改善されるのはデバッグ バイナリの使用時に限られ、フォアグラウンドの排他デバイス アクセスを使用するアプリケーションのみに効果があります。デバイスのエミュレーション時には、Windows キーのマスキングなど、一部の機能が使用できないので、エミュレーションはデバッグ目的にのみお勧めします。

     DirectX の旧バージョンを使用している場合は、正しいデバッグ DLL をコンピューターに組み込むために、デバッグ ソフトウェア開発キット (SDK) をインストールする必要があります。

レジストリ キーの重複の回避

DirectInput 8.0 以降のバージョンを使用するすべてのアプリケーションに対して、DirectInput は次のレジストリ内にキーを作成します。

HKEY_CURRENT_USER
    SOFTWARE
        Microsoft
            DirectInput

これにより、独立系ハードウェア ベンダー (IHV) は自社のデバイス マッピングを特定のアプリケーションに対してオフにすることができます。ただし、デバッグ時には、タイム スタンプとファイル サイズを含む新規キーがビルドのたびに生成されます。複数のキーがレジストリに生成されないようにするには、バイナリ値 AppIdFlag を使用します。

AppIdFlag の有効な値を次の表に示します。

1 キーを生成する際にタイム スタンプは無視されます。
2 キーを生成する際にファイル サイズは無視されます。
3 キーを生成する際にタイム スタンプとファイル サイズの両方が無視されます。

AppIdFlag を 3 に設定すると、同じファイル名のアプリケーションのビルドにはすべて同じキーが使用されます。

    AppIdFlag 値は、同じファイル名が付いた 2 つのアプリケーションが互いに入力制御マッピングに干渉する可能性をなくすために、テスト コンピューター上でのみ設定してください。