トップページ > 過去ログ > 記事閲覧
F10キーの取り扱いについて
名前:クラスクラス 日時: 2011/05/05 22:53

下記のソースは、F9とF10のON OFF状態を表示しています。 問題点1. F10キー以外は押したときのみ1になります。しかしF10きは、押したら1、再度押したら0になる、SW状態になっています。 これが正しくなる対策はないでしょうか? 問題点2、 F10キーが1の時、他のファンクションキーが正しく動作しなくなる。 実例)F10を押して1にすると、F9キーが反応しない これが正しくなる対策はないでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( true ); char KeyBuf[ 256 ] ; char wstr[ 500 ]; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 無限ループ while( 1 ) { // Windows 依存のメッセージ処理を行う if( ProcessMessage() == -1 ) break ; ClearDrawScreen() ; // すべてのキーの状態を得る GetHitKeyStateAll( KeyBuf ) ; sprintf_s(wstr,490,"F9の状態 = %d",KeyBuf[ KEY_INPUT_F9 ]); DrawString( 0 , 0 , wstr, GetColor( 255 , 255 , 255 ) ) ; sprintf_s(wstr,490,"F10の状態 = %d",KeyBuf[ KEY_INPUT_F10 ]); DrawString( 0 , 20 , wstr, GetColor( 255 , 255 , 255 ) ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |

Re: F10キーの取り扱いについて ( No.1 )
名前:いっち 日時:2011/05/06 19:34

Windows の標準的な動作では F10キーを押すと Altキーを単独で押したときと同じようにシステムメニューにフォーカスが移ります。 クラスクラスさんの仰る事象は F10キーが押したら押されっぱなしと判定されているわけではなく、 メインスレッドの処理が停止し、キーチェックや画面の描画も行われていない状態だと思います。 Altキーや F10キーの挙動については SetSysCommandOffFlag あたりでワード検索をかけると情報が得られると思います。 対策は・・・ちょっと思いつかないです。 DXライブラリを改造すれば出来そうな気はしますが・・・。
Re: F10キーの取り扱いについて ( No.2 )
名前:いっち 日時:2011/05/06 22:16

やってみました。 私の環境では一応動作しているように見受けられますが、どんな副作用があるかは分かりません。 (管理人さんがやってないってことは何か理由があるのかもしれません) h t t p : / / w w w5.puny.jp/uploader/download/1304687629.zip (pass:dxlib) 改造はDXライブラリ Ver 3.05 を基にしています。 DxWin.cpp の NS_ProcessMessage に3行ほど追加しました。 (同梱のNS_ProcessMessage.txtには //- の形でコメント入れてます)
Re: F10キーの取り扱いについて ( No.3 )
名前:クラスクラス 日時:2011/05/07 15:52

いっちさん、解答ありがとうございます。 当方でも問題なく動作しています。 う〜ん、悩ましいですね。画面を総てDXで表示するゲームとして考えた場合、システムメニューに 行ってしまっては困りますが。 標準のメニューを持つゲームでは有効になる必要がある。 ゲームの仕様に関わる問題ですね。 ただ、間違ってF10なりAltキーを押してその後ファンクションキーが動かないのは、バグとして見 られそうです…(誤解を与えますね「他のゲームではXXXだ」とか) 当面は最新のtestライブラリーを使用しているので修正できませんが。 落ち着いたら、ソース修正で対処したいと思います。 DxLIBで、その方法をスイッチできる関数でもあれば嬉しいのですが、本質的な理由が分からないので 何がよいのか分からない状態です。 お答えありがとうございました。
Re: F10キーの取り扱いについて ( No.4 )
名前:管理人 日時:2011/05/08 02:28

SetSysCommandOffFlag( TRUE ) ; を DxLib_Init の後にでも記述していただければ ALT キーや F10 キーの挙動を抑えることができますが、 これでは何か不都合があるのでしょうか?
Re: F10キーの取り扱いについて ( No.5 )
名前:いっち 日時:2011/05/08 09:35

あれ?っと思って確かめてみたら動作しました・・・。 確かめもせず SetSysCommandOffFlag 無効とか言ってました。すみません。 こことか > ://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1143 ここで > ://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=988 そんなようなやりとりがあったので・・・。 ファイヤーウォールに引っかかるということは無くなったのでしょうか?
Re: F10キーの取り扱いについて ( No.6 )
名前:クラスクラス(解決) 日時:2011/05/09 07:16

管理人様、いっちさん、いつもありがとうございます。 問題なく動作いたしました。その関数を気がついていませんでした… 解決です。
Re: F10キーの取り扱いについて ( No.7 )
名前:いっち 日時:2011/05/09 21:22

過去のスレッドでは SetSysCommandOffFlag が XP で動作しないという報告があるにもかかわらず、 私の環境(XP SP3)では機能しているので、管理人さんが何らかの対応を行ったのだとは思うのですが、 掲示板や更新履歴にそういった記述が見当たらないのでやっぱりまだ気になります。(しつこくてすみません・・・) ファイヤーウォールの件についても、もう問題ないのでしょうか?
Re: F10キーの取り扱いについて ( No.8 )
名前:管理人 日時:2011/05/21 14:51

あれ・・・ そういえばそんな経緯がありましたね(・・; 少なくともウイルスバスターでは不正な処理として検出されなくなっているようです いっちさんがお使いのセキュリティソフトはなんでしょうか?
Re: F10キーの取り扱いについて ( No.9 )
名前:いっち 日時:2011/05/21 17:14

私は Microsoft Security Essentials を使用していますが、特に怒られたりしません。 なんだか不思議な感じではありますが、うまく動作するのは喜ばしいです。
Re: F10キーの取り扱いについて ( No.10 )
名前:管理人 日時:2011/05/29 14:35

ご返答ありがとうございます ウイルスバスターだけ大丈夫になったというわけではないんですね 暫く今のまま様子を見ようと思います
Re: F10キーの取り扱いについて ( No.11 )
名前:いっち 日時:2011/06/01 22:01

> 暫く今のまま様子を見ようと思います 了解です。 他にも SetSysCommandOffFlag の動作確認が取れている環境(OSとセキュリティソフト?)や 動作しない環境をご存知の方がいらっしゃいましたらお知らせ頂けますと助かります。 いまのところ XP & MSE と XP(たぶん?) & ウィルスバスターは大丈夫なようです。 ※修正 (No.13)の部分を修正。本当にすみません。 //- 以下、テストコード (F10キーやAltキーを押してもカウンタが止まらなければOK) -// #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); SetWindowText( _T("DxLib:") DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; SetSysCommandOffFlag( TRUE ); SetDrawScreen( DX_SCREEN_BACK ); for ( int i = 0; ProcessMessage( ) == 0; i++ ) { ClearDrawScreen( ); DrawFormatString( 0, 0, GetColor( 255, 255, 255 ), "TEST %d", i++ ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: F10キーの取り扱いについて ( No.12 )
名前:sss 日時:2011/06/01 21:58

いっちさんのテストコードを実行してみました。 カウンタが止まりました。 ・・・すみません。 よくコードみたら、FALSEですね。 TRUEにしたら、カウンタは止まりませんでした。 1の環境では、ALT+TABでのアプリ切り替えもできませんが、これは仕様? (2の環境では正常に切り替わります) 1. Windows7(x64) + ウィルスバスター 2010   Visual Studio 2010 exp 2. Windows XP + なし   Visual Studio 2005 std
Re: F10キーの取り扱いについて ( No.13 )
名前:いっち 日時:2011/06/01 22:07

sssさん> ぎゃー、ごめんなさい。 肝心のコードが間違っていました。 SetSysCommandOffFlag( FALSE ); ↓↓↓↓ SetSysCommandOffFlag( TRUE ); (No.11) のコードは修正しました。 もし、よろしければもう一度お試し下さい。 本当に申し訳ありませんでした。 ※追記 sssさんが(No.12)のレスを修正されたのと、この投稿が前後してしまったようです。 わざわざ検証していただきありがとうございます。
Re: F10キーの取り扱いについて ( No.14 )
名前:sss 日時:2011/06/01 22:10

記事を何回か修正したので、入れ違っちゃいましたね^^; TRUEでは、1の環境でウィルスバスターを停止した状態でも ALT+TABでのアプリ切り替えはできませんでした。 (FALSEなら、切り替えできる)
Re: F10キーの取り扱いについて ( No.15 )
名前:いっち 日時:2011/06/01 22:16

> 1の環境では、ALT+TABでのアプリ切り替えもできませんが、これは仕様? うーん、どうなんでしょう・・・微妙な動作ですね。 もしかすると DxLib_Init の前で SetUseDirectInputFlag を TRUE にすればできるようになるのかもしれません。
Re: F10キーの取り扱いについて ( No.16 )
名前:sss 日時:2011/06/01 22:32

> もしかすると DxLib_Init の前で SetUseDirectInputFlag を TRUE にすればできるようになるのかもしれません。 ダメでした。 Windows7 の問題なのか、私の環境の問題なのか・・・ まぁ、管理人さんの見解待ちですかね。 (仕様かどうか)
Re: F10キーの取り扱いについて ( No.17 )
名前:管理人 日時:2011/06/04 22:23

本来なら ALT+TAB でのプロセス切り替えもできなくなるのが私の意図するところなのですが、 なぜか今現在 XP ではそうなってくれないようです ただ、この機能を作った当時は所謂ズルをできないようにするのが目的だったのですが、 ツールが充実した現在ではしようと思えば幾らでもズルができるので、今なら 「間違って Windowsキーや ALTキー・F10キーを押したときに動作が止まらないようにする」 という機能であった方が良いですよね というわけで、Vista と 7 でも既存のバージョンの XP での動作をするようにしてみました よろしければお試しになってみてください 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 // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: F10キーの取り扱いについて ( No.18 )
名前:sss 日時:2011/06/07 21:05

なるほど、一応意図通りの動きだったわけですね。 理由についても納得できる話です。 とはいえ、ウィンドウモードの場合でも切り替えできず、 違和感があったので、変更については歓迎します。 とりあえず、新しいバージョンで、切り替えができることを確認しました。
Re: F10キーの取り扱いについて ( No.19 )
名前:いっち 日時:2011/06/10 19:39

管理人さん> 対応おつかれさまです。 私が SetSysCommandOffFlag を使用するのは「F10キーを操作に使う」ためなので、今回の変更は全然問題ありません。

Page: 1 |