○Windowsキー、CTRL+ESC、ALT+TAB、ALT+ESCの無効化
前章の"特定のキーボードのキーを使用不能にする"での"低レベルなキーフック"のプログラム
を修正してWindowsキー、CTRL + ESC、ALT + TAB、ALT + ESC を無効化します
基本的に関数 HookProc を修正したのみです
Windows95,98,MEでは動作しません、システムフックを行います
プログラムとソース Hook3.ZIP
#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以外を返すと無効になる
//CTRL + ESC
if (pK->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1))
return TRUE;
//ALT + TAB
if (pK->vkCode == VK_TAB && pK->flags & LLKHF_ALTDOWN)
return TRUE;
//ALT + ESC
if (pK->vkCode == VK_ESCAPE && pK->flags & LLKHF_ALTDOWN)
return TRUE;
}
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;
}
▲トップページ
>
Windows と C++