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);
}
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);
}
相关文章推荐
- c++builder Color
- C++ STRING 和WSTRING 之间的互相转换函数
- C语言中返回错误信息的相关函数用法总结
- C++程序屏蔽windows2008系统安全界面(ctrl+alt+delete热键)
- C++之tinyXML使用
- C++内联函数与宏定义
- 浅谈C++多态性
- c++
- C++ 结构体字节对齐
- C语言(10)--逻辑短路问题、显示安装进度、Bessel函数、消除多余的空格
- C语言(9)--获得缓存区中的输入数据、趣味转义字符
- C++ 结构体和类的区别
- ls C语言实现
- C++模板的申明和定义
- C++读书笔记
- C++函数声明和定义深度解析
- C++内存管理
- c++10 Seattle Clang error
- C++ Builder XE8 安卓开发之使用ini文件保存数据
- C++中的头文件和源文件