トップページ > 過去ログ > 記事閲覧
SetSysCommandOffFlag関数
名前:ma-. 日時: 2009/01/17 17:29

 こんにちは。数年前からDxLibを重宝させていただいております。  早速ですが, 表記の関数が機能していないように思われます。注意点にあるようにDxLib_Init関数の後で設定しておりますが, フルスクリーン/ウィンドウのいずれのモードにおいても, 表記関数にTRUEを渡してもFALSEを渡してもしっかりWindowsキーが効いてしまいます(^^;  まぁ使用者に押さないようにしてもらえば良いだけなのですが, できれば正常に機能していただけるとありがたいので, 調査していただけないでしょうか。

Page: 1 |

Re: SetSysCommandOffFlag関数 ( No.1 )
名前:管理人 日時:2009/01/19 01:02

ご報告ありがとうございます 現在私の環境で調べててみたところ、SetSysCommandOffFlag 関数が無効になっていました ただ、有効にしても効果はあらわれず・・・ この機能は Windows2000 を使用している頃に実装したのですが、どうやら XP では効果が無いようです また、ウイルスバスターなどファイアウォール機能を搭載しているアプリを常駐している場合も 効果を強制的に抑えられてしまうようです ALTキーを押すと画面が止まってしまい、演出や難易度に影響が出るのが嫌で搭載した機能ですが、 OSが変わる度、OSのマイナーアップデートが行われる度に無効にする手段が変わっているようですので、 軽い気持ちで無効機能を搭載しようとしたのは甘かったようです なので、今回を機に SetSysCommandOffFlag は使用不可にしようと思います 申し訳ありません m(_ _;m
Re: SetSysCommandOffFlag関数 ( No.2 )
名前:ma-. 日時:2009/01/22 22:04

 調査ありがとうございます。まぁアプリそのもの に影響はない(押されなければという前提ですが)の で, ガマンします。  というか, Windowsプログラムって面倒ですね。OS の動きを止めてこちらが100%処理を占有するような プログラムとか組みたいものです(笑)  ところで, ファイアウォールの話題に触れられて おりましたが, それで思い出したことがあります。 VC++でコンパイル作業中, 様々な.dllを読み込んだ という報告がなされますよね。その中に, セキュリ ティソフト関連の.dllも読み込まれていることが謎 でした。このこともきっと関係あるんでしょうね。  ということは, セキュリティ関連の.dllを読み込 まれないようにすればある程度意図した動作が可能 になるようなものもあるのでしょうか。よくわかり ませんが。  以上, ひとりごとでした(^^; # 前回, 改行手動だとは気付かずに横方向にダラダ # ラと続けてしまい, お見苦しかったかと思いま # す。以後気をつけます。
Re: SetSysCommandOffFlag関数 ( No.3 )
名前: 日時:2009/01/26 17:36

>ALT+TAB Win98/95が主流の時代は、 ALT+TABを禁止するとうい明確な機能は ありませんでした。(いまも明確にありませんが。) 結果見出されたのが、スクリーンセーバの時、 これらが無効になる事実です。 これを利用して、SystemParametersInfoというAPIで システムをスクリーンセーバー状態だと設定し ALT+TABなどのキー操作を無効にしていました。 WinNT/2000/XP主流の時代は システムのグローバルフックを使用する方法が とられました。しかしこれはクラッカーなどが、 システムを攻撃する際にも使用する為、現存する 殆どのウィルスソフトが、フックに対する関数群に 対して監視を行い使用された場合に警告を出します。 ただ、これらの方法はDLLでプロシージャを 設定しないとHookがうまく動かない場合が あるようです。(DXライブラリで動かないのは このあたりが関係しているかもしれません。) > セキュリティソフト関連の.dllも読み込まれて うーん、見間違いだと思うのだが。。。 入っていないかもしれないソフトのDLLなんて システムが読みに行ったら大変なことになりますが。。
Re: SetSysCommandOffFlag関数 ( No.4 )
名前:ma-. 日時:2009/01/30 00:52

コンパイル時の出力をCup&Paste ただし, 実行ファイル名はワイルドカードにしてい ます(^^; ----- ここから ----- '*.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\comctl32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\advapi32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\rpcrt4.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\secur32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\gdi32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\user32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\winmm.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\wsock32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\ws2_32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\msvcrt.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\ws2help.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\imm32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\msacm32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\shell32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\shlwapi.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\ole32.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\lpk.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\usp10.dll' を読み込みました '*.exe': 'C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 7.0\adialhk.dll' を読み込みました '*.exe': 'C:\WINDOWS\system32\RDDV1001.DLL' を読み込みました '*.exe': 'C:\WINDOWS\system32\RDDV1001.DLL' をアンロード '*.exe': 'C:\WINDOWS\system32\RDDV1001.DLL' を読み込みました '*.exe': 'C:\WINDOWS\system32\RDDV1001.DLL' をアンロード '*.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll' を読み込みました ----- ここまで ----- 確かに読み込んでます(^^;;; ウィルス対策ソフトに何を使っていても同様の挙動 をするかは判りかねますけれども……
Re: SetSysCommandOffFlag関数 ( No.5 )
名前: 日時:2009/01/30 13:11

>確かに読み込んでます なるほど、見た感じだとウィルスソフト云々は あまり関係なくWindowsにより規定として アプリケーションの初期化時に読み込まれる DLLがのレジストリのリストの中に含まれている のでしょう。 #adialhk.dllですよね?? このレジストリに登録されたものはuser32.dllが 読み込まれるアプリケーションが実行されるときに 勝手にロードされるDLLなので、ウィルスソフトで あろうと無かろうと関係無く、単に登録されている ものを読み込みます。 #Path :HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ #WindowsNT\CurrentVersion\Windows #恐らくこのあたりにキーが追加されています。 #AppInit_DLLsだったか。 このDLLがフックを邪魔している可能性は ありますがセキュリティ上これをはずすのは セキュリティソフトを入れている意義が 問われるので行うべきではないでしょうね。。。
Re: SetSysCommandOffFlag関数 ( No.6 )
名前:ma-. 日時:2009/02/08 09:51

 返信遅れてすみません。  なるほど, 色々あるわけですね(^^; この辺り, Windowsそのもの(?)の挙動はさっぱりわかりませんです。  いずれにせよ, このままにしておくのが最善ということで, SetSysCommandOffFlag は自分のPCでは反応しないものの, 一応「対応されるPCもあるかも」という程度の気持ちで一応コードに含めておくことにします(^^;;;
Re: SetSysCommandOffFlag関数 ( No.7 )
名前:SooA 日時:2009/02/15 01:12

keybd_event をメインループ内に置いてみてはどうでしょうか? Ctrl+Alt+Del、Alt+Tab、Alt+Esc は無理ですが、 未定義コード(0x07)を送ることで、 うちではWindowsキーとAltキー、Applicationキー、F10、F12、を 押したときのフォーカスの移りを抑えることができています。 ↓メインループ内から呼び出してるキーチェック /*//////////////////////////////////////////// 入力状態を取得 *///////////////////////////////////////////// void InputCheck() { int Mouse; // 全てのキーを取得 GetHitKeyStateAll( caKey ); caKey[148] = 0; // 半角/全角を除外 caKey[112] = 0; // カタカナ/ひらがなを除外 caKey[58] = 0; // CapsLockを除外 // システムキー動作の無効化 keybd_event(0x07, 0, KEYEVENTF_KEYUP, 0); // マウス座標の取得 GetMousePoint( &iMouseX, &iMouseY ); Mouse = GetMouseInput(); if( Dxhnd == GetActiveWindow() ) if( iMouseX >= 0 && iMouseX <= SCREEN_WIDTH && iMouseY >= 0 && iMouseY <= SCREEN_HEIGHT ){ // マウス左ボタンの取得 caKey[216] = ( (Mouse & MOUSE_INPUT_LEFT) != 0)? 1:0; // マウス右ボタンの取得 caKey[217] = ( (Mouse & MOUSE_INPUT_RIGHT) != 0)? 1:0; // マウス中ボタンの取得 caKey[218] = ( (Mouse & MOUSE_INPUT_MIDDLE) != 0)? 1:0; } return; }
Re: SetSysCommandOffFlag関数 ( No.8 )
名前:管理人 日時:2009/02/15 12:30

おお! ・・・ 何故Altキー等が効かなくなるんだろう・・・・・? 不思議ですね・・・ ただ、どのくらいの頻度で呼べばよいのか、どのOSでも有効なのか等の 不明瞭な要素がありますので、ライブラリには載せず、Windowsキーなどを 無効にしたいという方が来られたときにこちらの方法を紹介するという感じにしようと思います(^ ^

Page: 1 |