○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++