您的位置:首页 > 编程语言 > C语言/C++

C++程序屏蔽常规按键(ctrl+alt+delete除外)

2015-09-02 15:35 429 查看
C++屏蔽键盘按键其实就是用钩子,只是让按键不起反应还是很简单的

1、首先设置钩子

HHOOK keyHook = NULL;

void setHook()

{
keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0);

//第一个参数表示低级键盘钩子,第二个参数表示回调函数,后面两个参数为回函数的参数

}

2、释放钩子,在程序退出的时候需要将钩子释放掉。

void unHook()

{
UnhookWindowsHookEx(keyHook);

}

3、回调函数

LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )

{

KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
if(nCode == HC_ACTION){
if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL)& 0x8000 && GetAsyncKeyState(VK_SHIFT)&0x8000)
{
qDebug()<<"Ctrl+Shift+Esc";
return 1;
}
else if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000)
{
qDebug() << "Ctrl+Esc";
return 1;
}
else if(pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
{
qDebug() << "Alt+Tab";
return 1;
}
else if(pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN)
{
qDebug() << "Alt+Esc";
return 1;
}
else if(pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN)
{
qDebug() << "LWIN/RWIN";
return 1;
}
else if(pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN)
{
qDebug() << "Alt+F4";
return 1;
}
/*else if(pkbhs->vkCode == GetAsyncKeyState(VK_CANCEL)&0x8000 &&  pkbhs->flags & LLKHF_ALTDOWN)
{
qDebug()<< "Ctrl";
}*/
if(pkbhs->vkCode == VK_F12)
{
unHook();
TaskScreen( true );

qApp->quit();
return 1;
}
}
return CallNextHookEx(keyHook, nCode, wParam, lParam);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: