Windowsのゲームパッドの有効無効を管理するアプリ「DI Gamepad Manager」を公開しました
Windowsが認識しているDirectInput(DI)対応ゲームパッドをデバイスマネージャ同様の制御にてデバイスの有効/無効を切り替えることが出来る管理ツールアプリ「DI Gamepad Manager」を作成しました。
付加機能として有効なDIゲームパッドの状態を簡易的に確認することが出来ます。
※本ページはプロモーションが含まれています
このアプリを制作した経緯
Windows8より発生しているゲームパッドを繋いでいるとPCがスリープしない問題があります。
その不具合に対するスリープを時間設定通り正常に行える状態に戻す解決策を検討した結果、次の手法になるのですが現実的なものは1から3となります(4はWindows8、Windows10ではサポート終了にて不可能)
- DirectInputゲームパッドのUSB接続をPCより物理的に外す
- スイッチ付きUSBマルチタップなどの機器で電力供給をオフにする
- DirectInputゲームパッドデバイスをデバイスマネージャなどを利用してドライバ層で無効にする
- Windows OS側のアップデートで対策されるのを待つ
そこで3のゲームパッドの無効化を行う操作を簡単に行うためのツールアプリとして作成しました。
このツールによりゲームパッドをUSB接続したままドライバ無効で切り離すことが出来ます。
PCがスリープしない問題については以下を参照して下さい。
そもそもDirectInputとは・・・
Windowsで入力機器を処理するためにマイクロソフトが開発したDirectXによるデバイス入力規格です。マウスやキーボードやゲームパッドなどのハードウェアを難しく考えずにアプリやゲームに組み込む仕組みと考えてよいでしょう。
Windows95/NT4.0時代(1996年頃)に初期のものが登場し、長い間多くのアプリやゲームの開発に利用されています。
Windows XP時代(2005年)のXBox360発売にてXInput(XI)という新しい入力規格が発表され利用を推奨しましたが、当初PCでのXInput対応機器の普及が十分ではなくゲーム開発でも対応するのはWindows/XBox360同時開発を行っている大手ゲームメーカーのみという状況でした。
当時普及しなかった理由は以下が考えられます。
ユーザー側の理由
- DirectInput対応の一部の古いWindowsゲームがXBox360コントローラで遊べなかったこと(重要)
- XBox360のユーザ数が国によってバラバラで普及率が低いこと(当時主力のPlayStation2(PS2)、2006年発売のPlayStation3(PS3)とWiiなどの影響もある)
- NintendoDSやPSPなどの携帯ゲーム機にシフトしてきていたこと
- 当初はMicrosoft純正品が中心で一般的なPCゲームパッドと比較して価格が高かったこと
- フライトスティックやハンドルコントローラなどの入力に未対応なこと
- 今まで購入したゲームパッドが使えるのに買い替えてまで導入する気がないこと
- PlayStation2(PS2)タイプのゲームパッドが安価で多く販売されており必要がなかった
- PS2コントローラ変換アダプタにて安価でPS2同等の操作感が得られていた
メーカー側の理由
- PCゲームパッドメーカーが売上数の少ないゲームパッドにXInput対応のための新規設計製造コストを掛けられなかった
- DirectInputで問題ないのに追加でXInput対応するとゲーム開発コストが問題となった
- XInputはゲームコントローラ専用の規格であってキーボードやマウスに対応していなく、別に組み込む必要があった
- XInputのみ対応でWindowsゲームを開発するとゲームパッドが使えないなどの悪評価が懸念された
- PCゲームパッドメーカーが両対応としてDI/XI切り替えスイッチ付きゲームパッドを発売したことで互換性を確保したこと
DirectInputはDirectInput 8(DirectX 8)以降、大きな機能追加は行われず、現在は保守のみ継続しています。Windows標準利用で問題ないこともあり未だに現役で使われています。
既存のPlayStation系ゲームパッドと近いレイアウトであれば、ユーザーの違和感やメーカー側の設計変更も比較的小さく抑えられた可能性があります。
しかし、流石に20年以上も経過しているためXInputの対応率も上がっておりDirectInputとXInput規格の混在状態が続いています。
参考資料:
このアプリの利用に向いてる人
このアプリは技術的に理解している人向けのものとなりますが、以下のようなことに困っている、要望がある人にも有効と思います。
PCが設定時間通りスリープしない問題がある
本来の目的です。
USB接続したDirectInput対応ゲームパッドを抜き差したくない
本来の目的です。
現在のDirectInput対応ゲームパッドの接続状態を知りたい
デバイスマネージャをわざわざ開くより手軽で、ゲームデバイスの設定も開くことが出来ます。
多くのDirectInput対応ゲームパッドを接続している
接続したゲームパッドが一覧で表示されるので確認に向いています。
ゲームによって使用するゲームパッドを変えている
普段のゲームはプレステタイプのコントローラー、フライトゲームはジョイスティック、レトロゲームは4方向&ボタン、格闘ゲームはレバー&ボタンなど、使用する使用しないゲームパッドを交換して利用している場合には抜き差しせずに無効化したり有効化したり出来ます。
ゲームパッド切り替え目的のためにスイッチ付きUSBマルチタップなどを使用する代わりにもなります。
リンク
キー操作でゲームしたいのにゲームパッド操作と自動判断される
ゲームによってはゲームパッド接続あり検知でキー操作を無効化し、ゲームパッド操作を強要(固定化)するものがあります。ゲーム自体の問題なのですが、ゲームパッドをわざわざ外したくないのであれば無効機能で対応できます(全ゲームパッド無効>ゲーム起動>キー操作可能)
過去に接続したゲームパッドの履歴を知りたい
有効化した際にゲームパッドの製品名をキャッシュできるので無効化しても接続を外しても名称がわかります。ただしゲームパッドを抜く前にこのアプリで製品名をキャッシュする必要があります。
いくつかのゲームパッドを繋いでいるが、それが1P/2Pなのか順番を調べたい
コントロールパネル>デバイスとプリンター>ゲームデバイスの設定では1P/2Pなどの順番はわかりません。
さらにゲームデバイスの設定>詳細設定の「優先デバイス」というWindows仕様もあるため優先するデバイス以降の順番が変更されていることがあります。
このアプリではゲームパッドの接続確認にてデバイスと関連するIDの順序が変更されている状態を確認することが出来ます。
使用方法
ダウンロード後、任意のフォルダに解凍を行い digamepad_manager.exe にて起動します。
有効無効の制御にはWindows権限が必要なので、アプリの起動時にユーザアカウント制御(UAC)の確認があります。
DI Gamepad Manager画面
表示項目の説明(デバイス部)
- DI・・・HIDデバイス(Human Input Device)の認識順の番号。キーボードやマウスなどのデバイスが表示されないので飛び番号になります。
- 製品名・・・有効時のみ製品名を取得。無効時と未接続時の場合、キャッシュがあれば製品名を表示し、キャッシュが無ければ「HID 準拠ゲーム コントローラー」と表示されます。
- 状態/有効・・・ゲームパッドが接続されてドライバ認識されている状態。
- 状態/無効・・・ドライバ無効によりゲームパッドが解除されている状態。
- 状態/未接続・・・過去に接続があり現在は物理的・通信的に切断されている状態。ゲームパッドを色々なUSBポートに抜き差ししている場合には未接続として同じ製品名が多く表示されます。
- 接続先・・・USBとBluetoothを識別します。USB括弧のIDは「数字&16進&番号」で数字&16進の一致は同一USBポート、IDの末番号は1つのUSBで2ポート以上の仕様など特殊仕様
表示項目の説明(ゲームパッド部)
表示には「Gpad状態の監視」をオンにする必要があります。有効無効の切り替え操作時の監視は対象ロストなど相性が良くないため、通常はオフにしています。
- ID・・・ゲームパッド制御で割り振られた0から始まるID。「優先デバイス」の設定により飛び番号になることがあります。
- 接続状態・・・ゲームパッド制御の接続状態。方向キーやボタンやスティック操作を行うことでカウント表示します。
操作部分の説明
- 更新ボタン・・・ゲームコントローラの一覧が更新されます。USB差し替えなどを行った際に利用します。
- 無効化ボタン・・・選択した有効なゲームパッドデバイスを無効にします。
- 有効化ボタン・・・選択した無効なゲームパッドデバイスを有効にします。有効化されたID+製品名はキャッシュ化されます。
- 設定ボタン・・・「ゲームデバイスの設定」を開きます(コントロールパネル>デバイスとプリンター>コントローラを選択>ゲームデバイスの設定)
- キャッシュ削除ボタン・・・製品名のキャッシュを削除します。削除することで過去に接続した現在無効化している製品名をクリアします。
- Gpad状態の監視・・・オンにてゲームパッドのIDと状態を監視します。デバイス制御とは別にコントローラ制御が行われます。
- 未接続の非表示・・・オンにて接続されている製品のみを一覧表示します。
注意事項など
アプリの管理者権限
このアプリで行うデバイスの有効化/無効化はデバイスマネージャ制御と同等の管理者権限が必要です。
そのため起動時にユーザアカウント制御(UAC)の確認にて許可を必要とします。
ゲームパッド電源の供給
USBなどの有線コントローラの場合、デバイスを無効化しても電力の供給は継続されます。
電力を遮断したいのであればPCより物理的に外す必要があります。
USB接続を外さずに電源をオフしたいのであれば個別スイッチ付きUSBハブ(USBマルチタップ)を利用します。ゲームパッドの多くはUSB2.0なので旧規格のバスパワーモデルでも十分ですがゲームパッド以外(SSDなど)にもハブを利用するならUSB3.0のバスパワーモデル、電力消費が多ければACアダプター対応モデルでしょうか。
■個別スイッチ付きUSBハブ(USB3.0バスパワーモデル)
リンク
未対応デバイス
このアプリで検出できるのは、DirectInput対応ゲームパッド入力デバイス部のみです。
以下のようなコントローラは未対応のため、一覧表示や有効化/無効化はできません。
基本的にXInput(XI)デバイスは認識できません。
- XInput専用ゲームパッド
- USBドングルがXInputと認識する無線ゲームパッド
- DI/XI切り替えスイッチ付きゲームパッドをXIに切り替えている
- マイクなどのサウンド機能付きDIゲームパッド(サウンドは無効化出来ない)
- ゲームパッド機能付きマクロキーボードなど(キーボードは無効化出来ない)
- XBOXコントローラのPC接続(XInputとして認識する)
- PS3コントローラ変換アダプタ(XInputとして認識するタイプのみ)
同一名の誤検知
「Gpad状態の監視」オンでのゲームパッドのID判定はベンダーIDと製品IDで行われています。そのため同じゲームパッドを複数利用しているなどの場合、同一ベンダーIDと製品IDになってしまうため、正確に識別できずIDが逆になったり一致しないことがあります。
(Windowsのライブラリ仕様によりベンダーIDと製品IDだけでは紐づけることが難しい)
複数ポート制御の不具合
ゲームデバイスの設定(設定ボタン)とゲームパッドの簡易確認(Gpad状態の監視オン)は無効の有無によって操作中に落ちることがあります。1つのUSBで2ポート以上のゲームパッド接続を行っているデバイスは有効無効が混在することを想定して作られていないため、ゲームパッドの制御でエラーになったりアプリが落ちる可能性があります(対策不可、設定はWindows標準機能joy.cpl、簡易確認はWinmm.dllの挙動となります)
動作確認
Windows10にて行っています。
ゲームパッドは、以下のUSB有線デバイスで確認しています。
- USBゲームパッド(BUFFALO)
- USBフライトスティック(Microsoft)
- PS2コントローラ変換アダプタ(LOAS)+PS1/PS2コントローラ(SONY)
以下のような最近の主流のゲームパッドや無線モデルなどは後日確認する予定です。
■DI/XI切り替えスイッチ付きゲームパッド(XBox配置、有線、振動あり)
リンク
ダウンロード
アプリはGitHubに置いています(Microsoft Defenderによるウィルススキャン済み)
スポンサーリンク
スポンサーリンク
コメント
0 件のコメント :
コメントを投稿