トップページ > 過去ログ > 記事閲覧
Alt+PrintScreenでスクリーンショット
名前:SB 日時: 2011/11/23 21:39

いつもお世話になっております。 早速ですが、質問させてください。 表題の通り、ALT+PrintScreenキーでスクリーンショットを取る時、おかしな挙動をするので調べてみたところ ALT+PrintScreenを押下時、GetJoypadInputStateで-1が返ってきてる為、全てのキー入力がONとして扱われてしまっていたようです。 これは仕様なのでしょうか?

Page: 1 |

Re: Alt+PrintScreenでスクリーンショット ( No.1 )
名前:管理人 日時:2011/11/27 21:25

いえ、特にそのような仕様はありません 手元で以下のような GetJoypadInputState の戻り値を画面に表示するテストプログラムを組んでテストしてみました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int State ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { ClearDrawScreen() ; State = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ; if( State == -1 ) { DrawString( 0, 0, "InputState:Minus!", GetColor( 255,255,255 ) ) ; } else { DrawFormatString( 0, 0, GetColor( 255,255,255 ), "InputState:%x", GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ) ; } ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } 手元の結果では、Alt+PrintScreen 押下時も特に GetJoypadInputState の戻り値が -1 になることはありませんでした よろしければ SBさんの環境ではどのようになるか試してみていただけないでしょうか? あと、よろしければ SBさんのPCでお使いのOSも教えてください m(_ _)m
Re: Alt+PrintScreenでスクリーンショット ( No.2 )
名前:SB 日時:2011/11/28 02:10

お世話になります。 ご丁寧なご解説ありがとうございます。 サンプルプログラムを試させていただきましたところ、 Alt+PrintScreenを押すと「Minus!」と表示されますのでやはり-1が返ってきてるようです。 動作環境として、Logの一部を貼っておきます。 1: DXライブラリ Ver3.06c 1: 論理プロセッサの数 : 1 1: OS WindowsXP ( Build 2600 Service Pack 3 ) 102: CPU動作速度:大体1.80GHz 102: MMX命令を使用します 102: SSE命令が使用可能です 102: SSE2命令が使用可能です 102: CPUベンダ:AuthenticAMD 103: CPU名:AMD Athlon(tm) 64 Processor 3000+ なお、今回の現象について最初に気づいたのは、テストプレイに協力してくれている知人でして、 その知人のPC環境もXPだという事を付け加えておきます。 お手数ですがよろしくお願いいたします。
Re: Alt+PrintScreenでスクリーンショット ( No.3 )
名前:yasi 日時:2011/11/28 03:46

使用OSがXPでしたので私の方でも確認できた事象を報告させていただきます。 管理人さんのテストコードを実行したところAlt+PrintScreenで-1が返って来ました。 しかし、もう1つ同じように-1が返って来たキーの組合せにCtrl+Pauseがあります。 この2つの共通点は私のキーボードではどちらも機能複合キーになっており、 PrintScreenにはSysRq、PauseにはBreakがAltやCtrlとの組合せで割当てられています。 もしかするとOSに限らずキーボードによって違うキーの組合せで発生する可能性もあるのかもしれません。 (すみません、手元にXP機しかないので他OSは調べられませんでした。) 関係ないかもしれませんが解決の糸口になれば。
Re: Alt+PrintScreenでスクリーンショット ( No.4 )
名前:管理人 日時:2011/12/04 03:53

ご情報ありがとうございます 私の環境でも Ctrl+Pause で -1 が返ってきました 修正版をアップしましたので、よろしければお試しください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 原因は「パッドのボタンとキーボードのキーの対応」の情報が 0 に初期化されていることでした、 パッドのボタンは最大4つのキーと対応させることができるのですが、初期状態では 一つのボタンに付き一つのキーと対応させていて、残りの3つの対応キーについてはキー番号0になっています なので、仮にキー番号0のキーが押されるとパッドのすべてのボタンが押されたことになってしまい、 戻り値が -1 になってしまうのですが、Ctrl+Pause や Alt+PrintScreen がこのキー番号0のキーに 割り当てされていたみたいです( 私の環境では Alt+PrintScreen では反応しませんでしたが・・・ ) DirectInput のキー番号の定義を見てもキー番号0のキーというのが存在していないので、この機能を 作った当時の自分は初期値をキー番号0にしておけば問題ないと考えたのかもしれません とりあえず今回はキー番号0番の場合は対応キー無しという扱いにすることで問題を回避することにしました
Re: Alt+PrintScreenでスクリーンショット ( No.5 )
名前:SB 日時:2011/12/04 06:18

お世話になります。 早速の対応ありがとうございます。 改良版、ためさせていただきましたところ、ちゃんと0が返ってきてるようで問題なく使用できました。 ただ、ちょっと気になる事が。 今回の件と関係あるのかわかりませんが、 この改良版を使うと、プログラム終了時に異常終了してしまいます。 全てのプログラムが、というわけではなく、 この異常終了の発生が確認できているのは私が現在作っているゲームのみです。 (他に2つほど短いサンプルプログラムを試して見ましたが発生はしませんでした) DXライブラリのバージョンを戻してみたところ、正常に終了するようになりました。 今試してみたばかりで、原因の絞込みなどはまだしておりませんが 取り急ぎご報告させて頂きます。
Re: Alt+PrintScreenでスクリーンショット ( No.6 )
名前:管理人 日時:2011/12/04 22:21

タカトゥさんからも同様のご指摘を頂いて、プログラムの異常終了が発生する 原因となっていた箇所の修正を行いました この修正で SBさんの環境で発生している終了時の異常終了も直った可能性がありますので よろしければこちらの修正バージョンを試してみていただけないでしょうか? m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: Alt+PrintScreenでスクリーンショット ( No.7 )
名前:SB 日時:2011/12/06 04:19

お世話になります。 修正バージョンにて、正常動作を確認しました。 早速の対応ありがとうございました。
Re: Alt+PrintScreenでスクリーンショット ( No.8 )
名前:SB 日時:2011/12/08 18:20

たびたびすみません。 修正バージョンを使用したプログラムですが、メインPCを使ってるときは問題なかったのですが、 サブで使っているノートPCで起動しようとすると、異常終了する事がわかりました。 (OSはXPです) 画像を表示する前の段階らしいのですが、細かい問題部分まではまだ調べてません。 バージョン3.06Cに戻すとこの現象は起こりませんでした。 取り急ぎご報告まで。
Re: Alt+PrintScreenでスクリーンショット ( No.9 )
名前:管理人 日時:2011/12/11 18:23

プログラム実行時に作成される Log.txt の出力をよろしければこちらの掲示板に貼り付けて頂けないでしょうか? あと、違う原因である可能性が高いですが、別件でスタックオーバーフローが原因でエラー終了してしまう バグを修正しましたので、よろしければ修正バージョンをお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: Alt+PrintScreenでスクリーンショット ( No.10 )
名前:SB 日時:2011/12/12 22:50

お世話になります。 すみません、しばらく忙しくて放置してました。 準備してくださった修正バージョンで試してみましたが、同様の現象でした。 前回、異常終了と書きましたが正確ではありませんでした。 正確には、画面がまっくらな状態で何の反応も示さなくなり、強制終了させようとしたら エラーがでて異常終了する、でした。 LOG.TXTを吐き出させてみたところ、次のようになってました。 参考になれば幸いです。 0:システムの情報を出力します 0: DXライブラリ Ver3.06d 0: 論理プロセッサの数 : 1 0: OS WindowsXP ( Build 2600 Service Pack 3 ) 100: CPU動作速度:大体0.66GHz 100: MMX命令を使用します 100: SSE命令が使用可能です 100: CPUベンダ:GenuineIntel 101: CPU名:Mobile Intel(R) Pentium(R) III CPU - M 800MHz 102:COMの初期化... 成功しました 110:メモリ総量:374.76MB 空きメモリ領域:196.67MB 110:タイマーの精度を検査します 111:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 111: パフォーマンスカウンターを使用します タイマー精度 : 3579.545000 KHz 111: ソフトの二重起動検査... 二重起動はされていませんでした 112:ウインドウクラスを登録します... 登録に成功しました 113:ウインドウモード起動用のウインドウを作成します 121:ウインドウの作成に成功しました 204:IMEを無効にしました 205:ウインドウスタイルをウインドウモード用に変更します... 完了 206:DirectInput関係初期化処理 206: DirectInput7 の取得中... 成功 224: 引き続き初期化処理... 初期化成功 225: ジョイパッドの初期化... 227: ジョイパッドの初期化は正常に終了しました 227: マウスデバイスの初期化... 初期化成功 228: キーボードデバイスの初期化... 初期化成功 232:DirectInput 関連の初期化は正常に終了しました 234:DirectSound の初期化を行います 235:DirectSound インターフェースの取得を行います.... 成功 238:引き続きインターフェースの初期化処理... 成功 322: DirectSound デバイスを列挙します 324: モジュール名: ドライバ記述:プライマリ サウンド ドライバ 324: モジュール名: ac97intc.sys ドライバ記述:Intel(r) Integrated Audio 325: 最大サンプリングレート:48.00KHz 最小サンプリングレート:8.00KHz 325: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 325: 利用可能サンプリング精度 325: プライマリ 16bit = OK 8bit = NO 326: セカンダリ 16bit = OK 8bit = NO 326: 利用可能チャンネル 326: プライマリ MONO = OK STEREO = OK 326: セカンダリ MONO = OK STEREO = OK 327:DirectSound の初期化は正常に終了しました 355:DirectDraw オブジェクトの取得を行います.... 成功 360:引き続き初期化処理... 初期化に成功しました 363:IDirect3D9Ex オブジェクトを取得します.... IDirect3D9 オブジェクトを取得します.... 成功 422:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します 720:成功 721:Driver:ialmdnt5.dll Description:Intel(R) 830M Graphics Controller-0 722:画面のフォーマットは D3DFMT_X8R8G8B8 です 722:Zバッファのフォーマットは D3DFMT_D16 です 722:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 722:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 723:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です 723:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 723:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です 723:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 723:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です 724:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 724:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です 724:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です 724:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です 724:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です 725:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 725:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 725:使用できる描画用ABGR浮動小数点16ビット型カラーフォーマットがありませんでした 725:使用できる描画用ABGR浮動小数点32ビット型カラーフォーマットがありませんでした 726:最大テクスチャサイズ 幅:2048 高さ:2048 726:テクスチャステージテンポラリレジスタ:使用不可 726:減算合成のハードウェア対応:エミュレート 726:頂点シェーダーバージョンコード:300 726:ピクセルシェーダーバージョンコード:0 762:バックバッファロック転送の時間:4828nsec 一時的な描画可能バッファを使用した転送の時間:4749nsec 763:バックバッファロックを使用しません 763:Zバッファを作成します.... 成功 766:プログラマブルシェーダーを使用しません 793:フォントの初期化を行います 812:フォントの初期化は正常に終了しました 813:文字コードバッファの初期化を行います... 完了しました 1191:メモリテクスチャの作成に失敗しました (長いので中略) 8994:メモリテクスチャの作成に失敗しました 49130:ウインドウを閉じようとしています 49180:ウインドウが破棄されようとしています 49181:ソフトを終了する準備が整いました
Re: Alt+PrintScreenでスクリーンショット ( No.11 )
名前:管理人 日時:2011/12/18 17:02

こちらもご返信の頻度が少なくて申し訳ありません 載せていただいた Log.txt のエラーは作成中の新機能の為の変更が原因で発生していると思われます 新機能は作業時間が確保できずまだ完成の目処が立っていない状態なので、ひとまず変更部分を 元に戻してみました 何度も申し訳ありませんが、よろしければこちらをお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: Alt+PrintScreenでスクリーンショット ( No.12 )
名前:SB 日時:2011/12/21 23:25

お世話になります。 ノートPCでも正常に動く事を確認しました。 お手数をおかけしました。 ありがとうございます。

Page: 1 |