//一个拦截系统消息的钩子程序事例
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
BOOL C**App::InitInstance()
{
HHOOK hhkKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,
AfxGetApp()->m_hInstance, 0);
///...///
InitCommonControls();
CWinApp::InitInstance();
///...///
return TRUE;
}
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
if (nCode == HC_ACTION)
{
int vKey = LOBYTE(p->vkCode);
//如果为键盘消息
if (wParam == WM_KEYDOWN)
{
switch(vKey)
{
case 'd':
case 'D':
{
//如果用户按下了Win + D键盘消息
if(::GetKeyState(VK_LWIN) < 0)
{
///do anything here///
}
}
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}