トップページ > 過去ログ > 記事閲覧
ALTキーを無効にしたい
名前:la 日時: 2007/12/15 21:35

こんにちは。 dxlibが原因かどうかはわかりませんが、 ウインドウモードでゲームを起動した場合、 ALTキーを押すとプログラムが一時停止します。 誤爆防止のためにこれを無効にしたいのですが、 可能でしょうか?

Page: 1 |

Re: ALTキーを無効にしたい ( No.1 )
名前:管理人 日時:2007/12/16 18:01

 現状のバージョンでも可能ですが、別途低レベルキーボードフックを行う DLLが必要でしたので、無くても無効に出来るようにしてみました。 宜しければこちらのバージョンをダウンロードして下さい。 http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)  使用する関数は以下の関数です。 // ALT キーや Windowsキーを無効にするかどうかを設定する // Flag : TRUE=無効にする FALSE=有効にする(デフォルト) int SetSysCommandOffFlag( int Flag ) ;  機能は注釈の通りで、とりあえず DxLib_Init の後に TRUE を渡して 呼べば ALT キー等が効かなくなります。  宜しければお試しください。
Re: ALTキーを無効にしたい ( No.2 )
名前:la 日時:2007/12/16 20:00

すばやい対応ありがとうございます。 ですが、サンプルプログラムに最新版のライブラリを入れて、 DxLib_Init()の後にSetSysCommandOffFlag( TRUE ) ; で試して見ましたが、 WindowsキーやALT+TAB等が効きました。
Re: ALTキーを無効にしたい ( No.3 )
名前:管理人 日時:2007/12/16 22:28

 うーん駄目でしたか・・・  宜しければお使いのPCのOSと、統合環境( Borland C++ か VisualC++ か)を教えて頂けないでしょうか?
Re: ALTキーを無効にしたい ( No.4 )
名前: 日時:2007/12/17 18:19

実行環境(OS)を教えてください。 95/98なら「SystemParametersInfo関数」で 可能ですがWindowsNT系のOSでは低レベルな Hook関数を使わなければ、ALT+TABやALT+CTRL+DEL などのタスク スイッチを無効にすることが できません。 また、Vistaからはスイッチの実装方法が違うよう なので、これらの方法が使えるかは不明です。
Re: ALTキーを無効にしたい ( No.5 )
名前:la 日時:2007/12/17 21:40

OSはxp sp2で、開発環境はVC7す。
Re: ALTキーを無効にしたい ( No.6 )
名前: 日時:2007/12/18 13:35

SetWindowsHookEx関数にWH_KEYBOARD_LLを指定して 以下のようなフックコールバック関数を登録します。 LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam) { // By returning a non-zero value from the hook procedure, the // message does not get passed to the target window KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam; BOOL bControlKeyDown = 0; switch (nCode) { case HC_ACTION: { // Check to see if the CTRL key is pressed bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1); // Disable ALT+TAB if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN) return 1; break; } default: break; } return CallNextHookEx (hHook, nCode, wParam, lParam); } アプリ終了時には UnhookWindowsHookEx関数で 登録したフックプロシージャを登録解除する 必要があります。 WH_KEYBOARD_LLは_WIN32_WINNTの定義が0x0500以上 である必要があるため、Windowsヘッダより前に #define _WIN32_WINNT 0x0500 と定義する必要があります。 >>管理人 様 #フックなのでウィルスソフトとかに引っかかる #可能性がでてくるような気がしますが、 #DXライブラリに反映する場合使い方的には、 #DxLib_Initの前に無効にするかかどうか設定して #もらいDxLib_Initの中で登録DxLib_Endで解除 #という形ではダメでしょうか?
Re: ALTキーを無効にしたい ( No.7 )
名前:管理人 日時:2007/12/22 21:59

> laさん  うーん、おかしいですね・・・  宜しければ私の環境で機能していることが確認できているこちらの プログラムをお試しになってみて頂けないでしょうか? http://homepage2.nifty.com/natupaji/temp/SetSysCommandOffFlagTest.zip  因みに通さんも仰られていますが、この機能にはフックを使用して いますので、アンチウイルスソフトに引っかかると正常に機能しない かもしれません。 > 通さん  私もフックを利用して実装したのですが・・・・何故か機能していない ようです。(こちらの環境(98,2000,Vista)では動作を確認できました)  因みに環境依存が激しい機能なので、デフォルトでは ALTキー等は 利くようにしたいと思っています。

Page: 1 |