プログラミングのヒントおよびツール
プログラミングのヒントおよびツール
このトピックでは、以下の特殊なプログラミングのヒントを記載する。
- 前バージョンの DirectInput 用の設計
- デバッグ時の応答遅延の防止
- 重複したレジストリ キーの防止
- Force Editor
- GetDeviceData と取得されていないデバイス
前バージョンの DirectInput 用の設計
DirectInput8Create、IDirectInput8::Initialize、IDirectInputDevice8::Initialize、IDirectInputEffect::Initialize の各メソッドでは、Microsoft® DirectInput® のバージョン番号を渡す必要がある。このパラメータは、DirectInput サブシステムがどのバージョンの Microsoft DirectX® をエミュレートするかを指定する。
最新バージョンの DirectInput 用に設計されたアプリケーションは、Dinput.h で定義されている DIRECTINPUT_VERSION 値を渡す必要がある。
以前のバージョンで実行するように設計されたアプリケーションでは、設計対象の DirectInput のバージョンに対応した値、つまり上位バイトにメイン バージョン番号を付けた値を渡す必要がある。たとえば、DirectInput 3.0 上で動作するように設計されたアプリケーションは、0x0300 を渡す必要がある。
Dinput.h ヘッダー ファイルをインクルードする前に、DIRECTINPUT_VERSION を 0x0300 と定義すると、このヘッダー ファイルは DirectInput 3.0 と互換性を持つ構造体定義を生成する。
Dinput.h ヘッダー ファイルをインクルードする前に DIRECTINPUT_VERSION を定義しないと、Dinput.h ヘッダー ファイルは DirectInput の現行バージョンと互換性のある構造体定義を生成する。しかし、DirectX 3 と互換性のある構造体も、その名前に "_DX3" を付ければ使える。たとえば、DirectX 3 と互換性のある DIDEVCAPS 構造体は DIDEVCAPS_DX3 のような名前を付けられる。
また、DirectInput インターフェイスと DirectInputDevice インターフェイスの適切なバージョンを使う必要がある。DirectX 7.0 より前のバージョンの DirectX では、IDirectInput と、IDirectInputDevice または IDirectInputDevice2 のいずれかを使う必要がある。後者は DirectX 5.0 以降のバージョンで利用可能である。
デバッグ時の応答遅延の防止
Microsoft Windows® 2000 上で実行する DirectInput でキーボードまたはマウスを使う場合、デバッグ セッション中にコードを実行すると、短期間の遅延が発生する場合がある。この現象はデバック モードでのみ発生する。実際のアプリケーションでは発生しない。ただし、Emulation 値を次のレジストリ キーに追加することで、デバック モードでもこの遅延が発生しないようにできる。
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
DirectInput
名前 | タイプ | データ |
---|---|---|
Emulation | DWORD | 0x08 (キーボード用)
0x10 (マウス用) 0x18 (マウスおよびキーボード用) |
次の手順に従って、DirectX コントロール パネルから、列挙を使うように切り替えることもできる。
- Windows コントロール パネルを開く。
- DirectX コントロール パネルを開く。Windows XP を使っている場合、DirectX アイコンを表示するには、[クラシック表示に切り替える] をクリックしなければならないこともある。
- [DirectInput] タブを選択する。
- [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) は特定のアプリケーションで独自のデバイス マッピングを無効にできる。しかし、各ビルドは、デバッグ中にタイム スタンプとファイル サイズが含まれた新しいキーを生成する。レジストリで複数のキーが生成されないようにするには、バイナリ値 AppldFlag を使う。
次の表は、AppldFlag で使用可能な値を示している。
1 | キーを生成するときにタイム スタンプは無視される。 |
2 | キーを生成するときにファイル サイズは無視される。 |
3 | キーを生成するときにタイム スタンプとファイル サイズの両方が無視される。 |
AppldFlag を 3 に設定すると、ファイル名が同じであるアプリケーションのすべてのビルドは、同じキーを使う。
注 AppldFlag 値はテスト コンピュータのみに設定し、同じファイル名で出荷される 2 つのアプリケーションがお互いの入力コントロール マッピングを妨害しないようにする必要がある。
Force Editor
Force Editor には、次のような特徴がある。
説明
Force Editor アプリケーションを使うと、フォース フィードバック エフェクトをデザインしたり、そのエフェクトを単独でテストしたり、いくつかのエフェクトを組み合わせてテストしたりできる。エフェクトは、ファイルに保存して、DirectInput アプリケーションにロードさせることができる。
パス
実行可能ファイル :(SDK ルート)\Bin\Dxutils\Fedit.exe
ユーザーズ ガイド
Force Editor には専用のドキュメントが添付している。Fedit.exe を起動し、F1 キーを押すとオンライン ヘルプを参照できる。次のファイルをダブルクリックして、オンライン ヘルプを直接起動することもできる。
(SDK ルート)\Bin\Dxutils\Fedit.chm
GetDeviceData と取得されていないデバイス
Microsoft DirectPlay® のデバッグ バージョンを使う場合、デバイスが取得されていないときに、IDirectInputDevice8::GetDeviceData メソッドの動作が異常になることがある。IDirectInputDevice8::GetDeviceData を呼び出したときデバイスが取得されてない場合、デバイス データ バッファにはランダム バイトが置かれ、pdwInOut パラメータの値は変更されない。そのため、アプリケーションが DPNERR_UNACQUIRED エラー コードをチェックしない場合、アプリケーションは、バッファにデータがあると誤って判断することになる。