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がスリープしない問題については以下を参照して下さい。
このアプリの利用に向いてる人
このアプリは技術的に理解している人向けのものとなりますが、以下のようなことに困っている、要望がある人にも有効と思います。
PCが設定時間通りスリープしない問題がある
本来の目的です。
USB接続したDIゲームパッドを抜き差したくない
本来の目的です。
現在のDIゲームパッドの接続状態を知りたい
デバイスマネージャをわざわざ開くより手軽で、ゲームデバイスの設定も開くことが出来ます。
多くのDI対応ゲームパッドを接続している
接続したゲームパッドが一覧で表示されるので確認に向いています。
ゲームによって使用するゲームパッドを変えている
普段のゲームはプレステタイプのコントローラー、フライトゲームはジョイスティック、レトロゲームは4方向&ボタン、格闘ゲームはレバー&ボタンなど、使用する使用しないゲームパッドを交換して利用している場合には抜き差しせずに無効化したり有効化したり出来ます。
キー操作でゲームしたいのにゲームパッド操作と自動判断される
ゲームパッドの接続状況でキー操作を無効化し、ゲームパッド操作を強要(固定化)するゲーム自体の問題ですが、わざわざ外したくないのであれば無効機能で対応できます。
過去に接続したゲームパッドの履歴を知りたい
有効化した際に製品名をキャッシュできるので無効化しても接続を外しても名称がわかります。ただしゲームパッドを抜く前にこのアプリで製品名をキャッシュする必要があります。
幾つかのゲームパッドを繋いでいるが、それが1P/2Pなのか順番を調べたい
コントロールパネル>デバイスとプリンター>ゲームデバイスの設定では1P/2Pなどの順番はわかりません。
さらにゲームデバイスの設定>詳細設定の「優先デバイス」というWindows仕様もあるため優先するデバイス以降の順番が変更されていることがあります。
このアプリではゲームパッドの接続確認にてデバイスと関連するIDの順序が変更されている状態を確認することが出来ます。
使用方法
digamepad_manager.exe にて起動します。
この起動時にユーザアカウント制御(UAC)の確認があります。
DI Gamepad Manager画面
表示項目の説明(デバイス部)
- DI・・・DirectInputデバイスの認識順の番号
- 製品名・・・有効時のみ製品名を取得。無効時と未接続時の場合、キャッシュがあれば製品名を表示し、キャッシュが無ければ「HID 準拠ゲーム コントローラー」と表示
- 状態/有効・・・ゲームパッドが接続されてドライバ認識されている状態。
- 状態/無効・・・ドライバ無効によりゲームパッドが解除されている状態。
- 状態/未接続・・・過去に接続があり現在は物理的・通信的に切断されている状態。ゲームパッドを色々なUSBポートに抜き差ししている場合には未接続として同じ製品名が多く表示されます。
- 接続先・・・USBとBluetoothを識別します。USB括弧のIDは「数字&16進&番号」で数字&16進の一致は同一USBポート、IDの末番号は1つのUSBで2ポート以上の仕様など特殊仕様
表示項目の説明(ゲームパッド部)
表示には「Gpad状態の監視」をオンにする必要があります。
- ID・・・ゲームパッド制御で割り振られた0から始まるID。デバイス制御とは別管理です。
- 接続状態・・・ゲームパッド制御の接続状態。方向キーやボタンやスティック操作を行うことでカウント表示します。デバイス制御とは別管理です。
操作部分の説明
- 更新ボタン・・・ゲームコントローラの一覧が更新されます。USB差し替えなどを行った際に利用します。
- 無効化ボタン・・・選択した有効なゲームパッドデバイスを無効にします。
- 有効化ボタン・・・選択した無効なゲームパッドデバイスを有効にします。有効化されたID+製品名はキャッシュ化されます。
- 設定ボタン・・・「ゲームデバイスの設定」を開きます(コントロールパネル>デバイスとプリンター>コントローラを選択>ゲームデバイスの設定)
- キャッシュ削除ボタン・・・製品名のキャッシュを削除します。削除することで過去に接続した現在無効化している製品名をクリアします。
- Gpad状態の監視・・・オンにてゲームパッドのIDと状態を監視します。デバイス制御とは別にコントローラ制御が行われます。
- 未接続の非表示・・・オンにて接続されている製品のみを一覧表示します。
注意事項など
アプリの管理者権限
このアプリで行うデバイスの有効化/無効化はデバイスマネージャ制御と同等の管理者権限が必要です。
そのため起動時にユーザアカウント制御(UAC)の確認にて許可を必要とします。
ゲームパッド電源の供給
USBなどの有線コントローラの場合、デバイスを無効化しても電力の供給は継続されます。
電力を遮断したいのであればPCより物理的に外す必要があります。
未対応デバイス
このアプリで検出できるのは、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)
ダウンロード
アプリはGitHubに置いています(Microsoft Defenderによるウィルススキャン済み)
コメント
0 件のコメント :
コメントを投稿