Microsoft DirectX 8.0 (Visual Basic)

協調レベル

デバイスの協調レベルは、アプリケーション間および Microsoft® Windows® システムでデバイスを共有する方法を定義する。以下の例のように、協調レベルを設定するには DirectInputDevice8.SetCooperativeLevel メソッドを使用する。

' hwnd は、最上位ウィンドウのハンドルである。
Call diDevice.SetCooperativeLevel(hWnd, 
        DISCL_NONEXCLUSIVE Or DISCL_FOREGROUND) 

パラメータは、デバイスに関連する最上位ウィンドウ (一般的には、アプリケーション ウィンドウ) のハンドルと、1 つまたは複数のフラグである。

注 :  フォームの hWnd プロパティは、そのフォームが表示されるまで有効にならない。アプリケーションのメイン フォームの Load メソッドで Microsoft® DirectInput® デバイスを初期化している場合、協調レベルを設定する前に、Show メソッドを呼び出す必要がある。

DirectInput にはデフォルト設定が用意されているが、協調レベルは、明示的に設定しなければならない。これは、DirectInput にウィンドウのハンドルを与えるための唯一の方法だからである。このハンドルがないと、DirectInput は、ジョイスティックの再キャリブレーションなど、ウィンドウ メッセージが必要な状況で反応することができなくなる。

有効なフラグの組み合わせを以下の表に示す。

フラグ メモ
DISCL_NONEXCLUSIVE
DISCL_BACKGROUND
デフォルト設定
DISCL_NONEXCLUSIVE
DISCL_FOREGROUND
DISCL_EXCLUSIVE
DISCL_FOREGROUND
DISCL_EXCLUSIVE
DISCL_BACKGROUND
キーボードまたはマウスには無効

キーボードの場合は、DISCL_NOWINKEY と DISCL_NONEXCLUSIVE を同時に使用することもできる。このフラグで Windows キーを無効にすることにより、ユーザーは不注意でアプリケーションを終了することがなくなる。排他モードでは、Windows キーは常に無効である。

 :  Windows キーは、アプリケーションの協調レベルで排他協調レベルを通して受動的に、または DISCL_NOWINKEY フラグを使って能動的に無効にする場合でも、デフォルトのアクション マッピング UI が表示されている間はアクティブになる。

協調レベルには 2 つの構成要素がある。デバイスをフォアグラウンドまたはバックグラウンドで使用するか、および排他または非排他に使用するかである。

フォアグラウンドとバックグラウンド

フォアグラウンド協調レベルは、アプリケーションがフォアグラウンドにある場合、すなわち、入力フォーカスを持つ場合に限り、入力デバイスが使用可能になることを意味する。アプリケーションがバックグラウンドに移ると、入力デバイスは自動的に解放されるか使用不可になる。

バックグラウンド協調レベルとは、実際には「フォアグラウンドとバックグラウンド」のことである。バックグラウンド協調レベルのデバイスは、アプリケーションからいつでも取得して使用できる。

通常は、フォアグラウンド アクセス権だけで十分なはずである。というのも、大半のアプリケーションにとって、ほかのプログラムがフォアグラウンドにある場合に発生する入力に応答するようには設計されていないからである。

アプリケーションの開発中に、条件付きコンパイルを使って、デバッグ用にバックグラウンド協調レベルを設定することは有用である。これにより、アプリケーションは、デバッグ環境への切り替えでバックグラウンドに移動するたびに、デバイスへのアクセスを失うことがなくなる。

排他と非排他

多くの場合、あるアプリケーションがデバイスを排他レベルで使用しているからといって、ほかのアプリケーションが同じデバイスからデータを取得できないということにはならない。「排他レベルで使用」とは、ほかのアプリケーションが同じデバイスを排他には取得できないということを意味する。

たとえばあるミュージック プレーヤー アプリケーションの場合、アプリケーションはバックグラウンドにあっても、ハンドヘルドのリモート コントロール デバイスから入力を受け付ける。ここで、同じリモート コントロール デバイスからの信号に応答して、映画を再生するアプリケーションを実行するとしよう。ユーザーが [Play] を押したら何が起こるだろうか。両方のプログラムが再生を開始することになる。このような結果をユーザーが望んでいるとは思えない。そうならないようにするには、各アプリケーションに DISCL_EXCLUSIVE フラグを設定し、一度にどちらかのプログラムしか実行できないようにする必要がある。

フォース フィードバック エフェクトを利用するには、アプリケーションはデバイスへの排他アクセスができなければならない。

Windows 自体には、マウスへの排他アクセスが必要である。なぜなら、アクティブでないウィンドウ上でのクリックなどのマウス イベントを使って、アプリケーションにデバイスを強制解放させることが可能であり、そのことが、入力バッファからのデータの喪失など、潜在的に有害な結果を生む可能性があるからである。このため、あるアプリケーションが DirectInput8.CreateDevice に GUID_SysMouseを渡して作成されたシステム マウスに対する排他アクセス権を持っていると、Windows には一切のアクセスが許されず、マウス メッセージは生成されない。さらなる副作用として、カーソルが消えることもある。

あるアプリケーションがキーボードに対する排他アクセス権を持っている場合、DirectInput は一切のキーボード メッセージを抑制する。ただし、Ctrl+Alt+Del キーおよび Windows 95 や Windows 98 での Alt+Tab キーは使用できる。Windows 2000 では、排他モードの DirectInput アプリケーションに続いて起動されるアプリケーションは、キーボード データを取得できない。