トップページ > 記事閲覧
ReSetupJoypadについて
名前:Tir 日時: 2024/02/03 23:04

お世話になります。 パッドが接続されるとReSetupJoypadを呼ばれると思うのですが パッドが接続された状態で抜き差しを行うとパッドの数が増えてしまうバグがあるようです
メンテ

Page: 1 |

Re: ReSetupJoypadについて ( No.1 )
名前:管理人 日時:2024/02/04 16:32

ご報告ありがとうございます ただ、手元の環境でパッドが接続された状態で抜き差しをしてみましたが、パッドの数が増えるという 現象は確認できませんでした 『パッドの数が増えてしまう』とのことですが、抜き差しを行っていると 2→3→4→5... と 際限なく数が増えてしまうということでしょうか?
メンテ
Re: ReSetupJoypadについて ( No.2 )
名前:Tir 日時:2024/02/04 19:27

GetJoypadNum()を使い確認しているのですが、試してみたところパッドが2以上増えることはありませんでした。 また、パッドを外して起動した後パッドを接続しても2と表示されました 以下はログです、間違っているかもしれませんが 起動時ではXInput対応コントローラーとみなされDirectInput対応入力装置の初期化を中断しているところ 後に接続を行った場合XInput対応コントローラーとみなされずDirectInput対応入力装置として登録されているみたいです 0:ChangeWindowMode実行 0:ウインドウモードフラグが立てられました 1:ディスプレイ情報のセットアップ開始 1: モニターの数:1 ディスプレイデバイスの数:7 3: No.0 モニター名:\\.\DISPLAY1 2560x1440 32bit 165Hz 144x144dpi 24:ディスプレイ情報のセットアップ完了 102:ファイルアクセス処理の初期化...成功 104:IPv6アドレスを取得できませんでした 104:dxgi.dll の読み込み.... 成功 106:API CreateDXGIFactory2 のアドレスを取得します.... 成功 106:IDXGIFactory2 を作成します.... 成功 125:API CreateDXGIFactory6 のアドレスを取得します.... 成功 125:IDXGIAdapter を列挙 126: Adapter No.0 Desc:NVIDIA GeForce RTX 3070 Laptop GPU VRAM:8033MB 126: Adapter No.1 Desc:AMD Radeon(TM) Graphics VRAM:496MB 126: Output Device No.0 Name:\\.\DISPLAY1 ( 0, 0 )-( 2560, 1440 ) 126: Adapter No.2 Desc:Microsoft Basic Render Driver VRAM:0MB 127:dxgi.dll の解放 1 131:DXライブラリの初期化処理開始 131: システムの情報を出力します 131: DXライブラリ Ver3.24d 131: 論理プロセッサの数 : 16 132: OS Windows11 ( Build 22621 ) 232: 現時点のCPU動作速度:大体3.27GHz 232: MMX命令を使用します 232: SSE命令が使用可能です 232: SSE2命令が使用可能です 232: CPUベンダ:AuthenticAMD 233: CPU名:AMD Ryzen 9 5900HX with Radeon Graphics 234: COMの初期化... 成功 235: 非同期読み込み処理の初期化...成功 235: メモリ総量:64943.02MB 空きメモリ領域:40368.67MB 235: タイマーの精度を検査します 235: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 235: パフォーマンスカウンターを使用します タイマー精度 : 10000.000000 KHz 236: 236: ソフトの二重起動検査... 二重起動はされていませんでした 236: ウインドウクラスを登録します... 登録に成功しました 236: ウインドウモード起動用のウインドウを作成します 238: ウインドウ矩形 ( 1002, 599 )-( 1536, 751 ) 243: ウインドウの作成に成功しました 243: ウインドウを表示します 260: IMEを無効にしました 262: ウインドウスタイルをウインドウモード用に変更します... 完了 297: XInput DLL の読み込み中... 成功 299: DirectInput関係初期化処理 300: DirectInput8 の取得を試みます...成功 395: 引き続き初期化処理... 初期化成功 397: ジョイパッドの初期化... 397: XInput 対応コントローラーのチェックを開始します 397: XInput 対応コントローラー No.0 をチェック 399: XInput 対応コントローラー No.0 の接続を確認しました 399: XInput 対応コントローラー No.0 を入力ナンバー 0 で登録します 400: XInput 対応コントローラー No.1 をチェック 400: XInput 対応コントローラー No.1 の接続は確認できませんでした 400: XInput 対応コントローラー No.2 をチェック 400: XInput 対応コントローラー No.2 の接続は確認できませんでした 400: XInput 対応コントローラー No.3 をチェック 401: XInput 対応コントローラー No.3 の接続は確認できませんでした 401: XInput 対応コントローラーのチェック完了 401: DirectInput 対応ジョイパッドの列挙を開始します 505: DirectInput 対応入力装置を検出しました 505: Device Product GUID : 2004056e,0000,0000,00,00,50,49,44,56,49,44 507: Device Instance GUID : a28b37b0,1215,11ee,80,02,44,45,53,54,00,00 507: DirectInputDevice8 の作成... 成功 507: DirectInputDevice の情報を取得します... 成功 508: Device Product Name : Controller (JC-U3613M - Xinput Mode) 508: Device Instance Name : Controller (JC-U3613M - Xinput Mode) 508: 検出した DirectInput 対応入力装置が Xbox360コントローラーか確認... 不一致 508: 検出した DirectInput 対応入力装置が XboxOneコントローラーか確認... 不一致 509: 検出した DirectInput 対応入力装置が XInput 対応コントローラーか確認... 一致 677: 検出した DirectInput 対応入力装置の初期化を中断します 829: DirectInput 対応ジョイパッドの列挙終了 829: ジョイパッドの初期化は正常に終了しました 829: マウスデバイスの初期化... 初期化成功 830: キーボードデバイスの初期化... 初期化成功 837: DirectInput 関連の初期化は正常に終了しました 840: XAudio2 の初期化を行います 843: XAudio2_8.dll を使用します 845: XAudio2 インターフェースの取得と初期化を行います.... 成功 Ver2.8 896: XAudio2 の初期化は正常に終了しました 899: d3d11.dll の読み込み.... 成功 903: dxgi.dll の読み込み.... 成功 903: API CreateDXGIFactory2 のアドレスを取得します.... 成功 903: IDXGIFactory2 を作成します.... 成功 914: API CreateDXGIFactory6 のアドレスを取得します.... 成功 914: API D3D11CreateDevice のアドレスを取得します.... 成功 915: IDXGIAdapter を取得します.... 成功 915: IDXGIAdapter1 を取得します.... 成功 915: IDXGIAdapter2 を取得します.... 成功 916: IDXGIAdapter3 を取得します.... 成功 916: IDXGIAdapter4 を取得します.... 成功 916: Direct3D 11 FeatureLevel 11_0 以上を対象とします 916: ID3D11Device オブジェクトを取得します.... 成功 945: IDXGIDevice1 を取得します.... 成功 945: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 945: [ウインドウモード 512x96 ( 1024, 653 )-( 1536, 749 )] 945: IDXGISwapChain2 を作成します.... 成功 946: IDXGIFactory2->CreateSwapChainForHwnd の戻り値:0x00000000 946: IDXGIOutput を取得します.... 成功 946: Graphics Device:AMD Radeon(TM) Graphics 946: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 946: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 946: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 946: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 947: 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 947: 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 947: アルファ付き 16bit カラーフォーマットは DXGI_FORMAT_B4G4R4A4_UNORM です 947: アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 947: アルファテスト用 16bit カラーフォーマットは DXGI_FORMAT_B5G5R5A1_UNORM です 947: アルファテスト用 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 947: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 947: DXT2テクスチャフォーマットは使えません 947: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 947: DXT4テクスチャフォーマットは使えません 947: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 947: BC7_UNORM テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM です 949: BC7_UNORM_SRGB テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM_SRGB です 949: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 949: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 949: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 949: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 949: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 949: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 949: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 949: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 949: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 949: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 949: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 949: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 950: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 950: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 950: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 950: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 950: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 950: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 950: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 950: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 950: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 950: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 950: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 950: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 952: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 952: 使用する機能レベル:D3D_FEATURE_LEVEL_11_1 952: 同時にレンダリングできるバッファの数:8 952: 最大テクスチャサイズ 幅:16384 高さ:16384 952: 標準描画用の頂点バッファの作成.... 成功 952: シェーダーコード関係の初期化.... 成功 971: 各種シェーダー用定数バッファの作成.... 成功 972: 各種 ID3D11InputLayout の作成.... 成功 985: 画像の単純転送処理の初期化... 成功 986: 深度バッファを作成します.... 成功 987: フォントの初期化を行います 990: フォントの初期化は正常に終了しました 1002: 文字コードバッファの初期化を行います... 完了しました 1006:DXライブラリの初期化処理終了 1007:ウインドウスタイルをウインドウモード用に変更します... 完了 3500:ウインドウスタイルをウインドウモード用に変更します... 完了 3509:画面モード変更処理を開始します 3510: 深度バッファを作成します.... 成功 3511: ウインドウスタイルをウインドウモード用に変更します... 完了 3517:画面モード変更処理は正常に終了しました 3517:ウインドウスタイルをウインドウモード用に変更します... 完了 3535:ウインドウスタイルをウインドウモード用に変更します... 完了 11537:dat/img/title/stageHD.tirファイル読み込み失敗 11540:dat/img/title/ItemErrorHD.tirファイル読み込み失敗 17440:ジョイパッドの初期化... 17440: XInput 対応コントローラーのチェックを開始します 17440: XInput 対応コントローラー No.0 をチェック 17440: XInput 対応コントローラー No.0 の接続は確認できませんでした 17440: XInput 対応コントローラー No.1 をチェック 17441: XInput 対応コントローラー No.1 の接続は確認できませんでした 17441: XInput 対応コントローラー No.2 をチェック 17441: XInput 対応コントローラー No.2 の接続は確認できませんでした 17441: XInput 対応コントローラー No.3 をチェック 17441: XInput 対応コントローラー No.3 の接続は確認できませんでした 17441: XInput 対応コントローラーのチェック完了 17441: DirectInput 対応ジョイパッドの列挙を開始します 17995: DirectInput 対応ジョイパッドの列挙終了 17997:ジョイパッドの初期化は正常に終了しました 19061:ジョイパッドの初期化... 19061: XInput 対応コントローラーのチェックを開始します 19061: XInput 対応コントローラー No.0 をチェック 19061: XInput 対応コントローラー No.0 の接続は確認できませんでした 19061: XInput 対応コントローラー No.1 をチェック 19062: XInput 対応コントローラー No.1 の接続は確認できませんでした 19062: XInput 対応コントローラー No.2 をチェック 19062: XInput 対応コントローラー No.2 の接続は確認できませんでした 19062: XInput 対応コントローラー No.3 をチェック 19062: XInput 対応コントローラー No.3 の接続は確認できませんでした 19062: XInput 対応コントローラーのチェック完了 19062: DirectInput 対応ジョイパッドの列挙を開始します 19324: DirectInput 対応ジョイパッドの列挙終了 19324:ジョイパッドの初期化は正常に終了しました 19824:ジョイパッドの初期化... 19824: XInput 対応コントローラーのチェックを開始します 19824: XInput 対応コントローラー No.0 をチェック 19824: XInput 対応コントローラー No.0 の接続を確認しました 19824: XInput 対応コントローラー No.0 を入力ナンバー 0 で登録します 19826: XInput 対応コントローラー No.1 をチェック 19826: XInput 対応コントローラー No.1 の接続は確認できませんでした 19826: XInput 対応コントローラー No.2 をチェック 19826: XInput 対応コントローラー No.2 の接続は確認できませんでした 19826: XInput 対応コントローラー No.3 をチェック 19826: XInput 対応コントローラー No.3 の接続は確認できませんでした 19827: XInput 対応コントローラーのチェック完了 19827: DirectInput 対応ジョイパッドの列挙を開始します 20022: DirectInput 対応入力装置を検出しました 20023: Device Product GUID : 2004056e,0000,0000,00,00,50,49,44,56,49,44 20023: Device Instance GUID : a28b37b0,1215,11ee,80,02,44,45,53,54,00,00 20023: DirectInputDevice8 の作成... 成功 20023: DirectInputDevice の情報を取得します... 成功 20024: Device Product Name : Controller (JC-U3613M - Xinput Mode) 20024: Device Instance Name : Controller (JC-U3613M - Xinput Mode) 20024: 検出した DirectInput 対応入力装置が Xbox360コントローラーか確認... 不一致 20024: 検出した DirectInput 対応入力装置が XboxOneコントローラーか確認... 不一致 20024: 検出した DirectInput 対応入力装置が XInput 対応コントローラーか確認... 不一致 20026: DirectInputDevice のデータ形式に JOYSTICK 形式を設定... 成功 20026: DirectInputDevice の協調レベルに DISCL_FOREGROUND | DISCL_EXCLUSIVE を設定... 成功 20026: DirectInputDevice から取得する X軸 の値の範囲を設定... 成功 20026: DirectInputDevice から取得する Y軸 の値の範囲を設定... 成功 20027: DirectInputDevice から取得する Z軸 の値の範囲を設定... 成功 20027: DirectInputDevice から取得する Rx軸 の値の範囲を設定... 成功 20027: DirectInputDevice から取得する Ry軸 の値の範囲を設定... 成功 20027: DirectInputDevice から取得する Rz軸 の値の範囲を設定... 成功 20029: DirectInputDevice のボタンの数を取得... 成功 ボタンの数は 10 個です 20029: DirectInputDevice の X軸 のデッドゾーンを設定... 成功 20029: DirectInputDevice の Y軸 のデッドゾーンを設定... 成功 20029: DirectInputDevice の Z軸 のデッドゾーンを設定... 成功 20030: DirectInputDevice の Rx軸 のデッドゾーンを設定... 成功 20030: DirectInputDevice の Ry軸 のデッドゾーンを設定... 成功 20030: DirectInputDevice の Rz軸 のデッドゾーンを設定... 成功 20030: DirectInputDevice の DirectInputEffect No.0 を作成... 失敗 Error Code :0x80004001 20031: DirectInputDevice の DirectInputEffect No.1 を作成... 失敗 Error Code :0x80004001 20031: DirectInputDevice の通知処理用の Event を作成... 成功 20031: DirectInputDevice の通知処理用の Event を DirectInputDevice に設定... 成功 20031: DirectInputDevice のアクセス権を取得... 成功 20031: 検出した DirectInput 対応入力装置を入力ナンバー 1 で登録します 20032: 検出した DirectInput 対応入力装置の初期化は正常に終了しました 20333: DirectInput 対応ジョイパッドの列挙終了 20333:ジョイパッドの初期化は正常に終了しました 22014:フォントの初期化を行います 22014:フォントの初期化は正常に終了しました 22046:d3d11.dll の解放 1 22047:dxgi.dll の解放 1 22047:Direct3D11 のオブジェクト数を出力 22049:Direct3D11 のオブジェクト合計数 : 0 22049:DirectInput 関連の終了処理... 完了 22049:サウンド関連の終了処理... 完了 22069:ウィンドウ関連の終了処理... ウインドウを閉じようとしています 22077:ウインドウが破棄されようとしています 22077:ソフトを終了する準備が整いました 22131:完了 22132:COMを終了... 完了 22132: 22132:Alloc memory dump 22132: Total size:0(0.000kb) Alloc num:0 22133:
メンテ
Re: ReSetupJoypadについて ( No.3 )
名前:管理人 日時:2024/02/06 01:26

追加のご情報とログの貼り付けありがとうございます 私も Xboxコントローラー以外の XInput対応コントローラーを使用することで現象を再現することができました XInput対応コントローラーとみなされなくなるのはウィンドウプロージャ内で ReSetupJoypad を呼んでいたことが原因でした ( WM_DEVICECHANGE というメッセージが来た時にプロージャ内で呼んでいました ) これを WM_DEVICECHANGE が来た際にプロージャ内ではメッセージが来たことだけをフラグに記録して ReSetupJoypad 自体は ProcessMessage 内で呼ぶようにした所、正常に XInput対応コントローラーとして 判定されるようになりました その修正を施したバージョンをこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: ReSetupJoypadについて ( No.4 )
名前:Tir(解決) 日時:2024/02/06 09:40

無事に動作する事を確認しました。 正直このバグは稀にしか起きず、パッド入力が正常に動作しなくなり、再現性も不明で大分前から悩まされておりました。 一応2Pのパッド設定が適応されているという所までは分かったのでキー入力周りを何度も確認したりしてました^^; 最近パッドの接続の調子が悪く頻繁にこの現象が起きるようになった事で原因が分かりました パッドが接触不良で一瞬だけ切断されただけだと、USBが外れた効果音も鳴らないので特定が難しかったですね…
メンテ
Re: ReSetupJoypadについて ( No.5 )
名前:管理人(解決) 日時:2024/02/06 23:52

正常に動作するようになったとのことで何よりです 長い間ご迷惑をお掛けしていたということですみません 恐らく私は ReSetupJoypad 実装時は Xboxコントローラーを使用していたので本件の問題に気付かなかったのだと思います ( Xboxコントローラの場合は今回問題になった判定処理を使わずに、デバイス名だけで XInput対応であると判定できるので… ) ウィンドウプロージャ中だと XInput対応コントローラーかどうかの判定処理が失敗するのは盲点でした (- -;
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存