○特定のキーボードのキーを使用不能にする
■通常のキーのフック----------------------------------------------------
注)この方法では、
数字 文字 DLL BS TAB Enter F1〜 などのキーを使用不能にすることはできますが
WindowsキーやCTRL+ALT+DLLを使用不能にすることはできません(次の次の項)
Windowsキーを使用不能にするには低レベルなキーフックが必要です(次の項)
@キーボードフックを作成してください。
キーボードフック
Aフックプロシージャ―にて
0以外の数字を返すとそのキーが入力されなくなります。
TABキーの無効化
TABキーが総てのアプリケーションで無効になります。
LRESULT CALLBACK HookProc(int nCode, WPARAM wp, LPARAM lp)
{
if(wp==9){//TABキー
return TRUE;//0以外の値を渡すと無効化される
}else{
return CallNextHookEx(hHook, nCode, wp, lp);
}
}
CTRLキーの無効化
CTRLキーは自アプリケーションにしか効果がありません。
他のアプリケーションも無効にする場合は次の項の低レベルなキーフックを見てください
ほとんどフック部分の内容はこのままで低レベルなキーフックでも動作します。
LRESULT CALLBACK HookProc(int nCode, WPARAM wp, LPARAM lp)
{
if(GetAsyncKeyState (VK_CONTROL)){//CTRLキー
return TRUE;//0以外の値を渡すと無効化される
}else{
return CallNextHookEx(hHook, nCode, wp, lp);
}
}
■低レベルなキーフック------------------------------------------------
Windows95,98,MEでは動作しません、システムフックを行います
▽Windowsキーを使用不能にします。
CTRL+ALT+DLLを使用不能にすることは出来ません(次の項)
#define _WIN32_WINNT 0x0400
#include <windows.h>
//注意 このDLLを呼び出すアプリケーションはメッセージループ
//が必ず必要です。つまりコンソールアプリケーションからは動作しません
HINSTANCE hInst;
HHOOK hHook;
LRESULT CALLBACK HookProc(int nCode, WPARAM wp, LPARAM lp)
{
if(nCode==HC_ACTION){
KBDLLHOOKSTRUCT*pK = (KBDLLHOOKSTRUCT*)lp;
//91 : 左Windowsキー 92 : 右Windowsキー
if(pK->vkCode==91 || pK->vkCode==92) return TRUE;//100ms以内に0以外を返すと無効になる
}
return CallNextHookEx(hHook, nCode, wp, lp);
}
extern "C" __declspec(dllexport) void HookStart()
{
//低レベルなキーフックを指定
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, hInst, 0);
}
extern "C" __declspec(dllexport) void HookEnd()
{
UnhookWindowsHookEx(hHook);
}
BOOL APIENTRY DllMain(HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hInst=hModule;
return TRUE;
}
■CTRL+ALT+DLLを無効にする----------------------------------------------------
▽Windows 95 98の場合
BOOL SystemParametersInfo(
UINT uiAction, // 取得または設定するべきシステムパラメータ
UINT uiParam, // 実施するべき操作によって異なる
PVOID pvParam, // 実施するべき操作によって異なる
UINT fWinIni // ユーザープロファイルの更新オプション
);
#define SPI_SCREENSAVERRUNNING 97
設定もしくは設定解除
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, NULL, 0)
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, NULL, 0)
▽Windows NT 2000 XPの場合
GINA.DLL をカスタマイズします。
(次の次のページにあります)
▲トップページ
>
Windows と C++