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キー等は
利くようにしたいと思っています。
|