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キーなどを
無効にしたいという方が来られたときにこちらの方法を紹介するという感じにしようと思います(^ ^
|