[MFC]屏蔽按鍵

HHOOK		glhHook = NULL;					// 鉤子句柄
HINSTANCE	glhInstance = NULL;				// 模塊實例句柄
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	BOOL fEatKeystroke = FALSE;
	PKBDLLHOOKSTRUCT p = NULL;

	if (nCode == HC_ACTION) 
	{
		p = (PKBDLLHOOKSTRUCT) lParam;
		switch (wParam) 
		{
		case WM_KEYDOWN: 
		case WM_SYSKEYDOWN:
		case WM_KEYUP:    
		case WM_SYSKEYUP: 
			
			if(p->vkCode == VK_LWIN || p->vkCode == VK_RWIN){
				// 屏蔽Win
				fEatKeystroke =true;
			}else if(p->vkCode == VK_TAB && (p->flags & LLKHF_ALTDOWN)){
				// 屏蔽Alt+Tab
				fEatKeystroke =true;
			}else if(p->vkCode == VK_ESCAPE && (p->flags & LLKHF_ALTDOWN)){
				// 屏蔽Alt+Esc
				fEatKeystroke =true;
			}else if(p->vkCode == VK_ESCAPE && GetKeyState(VK_CONTROL)){
				// 屏蔽Ctrl+Esc
				fEatKeystroke =true;
			}
			break;
		default:
			break;
		}
	}

	return (fEatKeystroke ? true : CallNextHookEx(glhHook,nCode,wParam,lParam));
}

//安裝及卸載鉤子:

void _stdcall StartKeyMask()
{
	// 安裝鉤子
	glhHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,glhInstance,0);
}

void _stdcall StopKeyMask()
{
	// 卸載鉤子
	if (glhHook!=NULL)
		UnhookWindowsHookEx(glhHook);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章