QtApplets-MyHook
Posted DreamLife.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QtApplets-MyHook相关的知识,希望对你有一定的参考价值。
QtApplets-MyHook
今天要演技的是在Qt下是使用Hook 钩子函数,主要就是项目需要在win平台下实现,需要屏蔽掉一些键盘组合按键,以防止用户杀死程序。
文章目录
关键字:
屏蔽
、键盘
、鼠标
、HOOK
、钩子
1 新增注册表条目
这个是为了屏蔽Ctrl + Alt + Delete
用的
/**
* 新增注册表内容
*/
#define TASKMANAGERSystem "HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System"
#define TASKMANAGERExplorer "HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer"
2 键盘钩子过程
/**
* @brief keyProc
* @param nCode
* @param wParam
* @param lParam
* @return
* 键盘钩子过程
*/
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )
//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
//如果nCode等于HC_ACTION则处理该消息,如果小于0,则钩子子程就必须将该消息传递给 CallNextHookEx
if(nCode == HC_ACTION)
if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL)& 0x8000 && GetAsyncKeyState(VK_SHIFT)&0x8000) //屏蔽 "Ctrl+Shift+Esc"
return 1;
if(pkbhs->vkCode == VK_ESCAPE && GetAsyncKeyState(VK_CONTROL) & 0x8000) //屏蔽 "Ctrl+Esc"
return 1;
if(pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN) //屏蔽 "Alt+Tab"
return 1;
if(pkbhs->vkCode == VK_ESCAPE && pkbhs->flags &LLKHF_ALTDOWN) //屏蔽 "Alt+Esc"
return 1;
if(pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN) //屏蔽 "LWIN/RWIN"
return 1;
if(pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN) //屏蔽 "Alt+F4"
return 1;
return CallNextHookEx(mKeyHook, nCode, wParam, lParam);
3 鼠标钩子过程
/**
* @brief mouseProc
* @param nCode
* @param wParam
* @param lParam
* @return
* 鼠标钩子过程
*/
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
Q_UNUSED(nCode);
Q_UNUSED(wParam);
Q_UNUSED(lParam);
return 1;
4 安装钩子
/**
* @brief MyHook::hook
* @param flag
* 安装钩子
*/
void MyHook::hook(bool flag)
if (flag)
//这两个底层钩子,不要DLL就可以全局
//底层键盘钩子
mKeyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0);
//底层鼠标钩子
// mMouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0);
else
UnhookWindowsHookEx(mKeyHook);
// UnhookWindowsHookEx(mMouseHook);
测试
这个需要在虚拟机下测试,程序需要以管理员运行。
这是没有开启的状态
开启以后:
开启任务栏快捷键也做了屏蔽。没法展示,下载源码自己体验吧。
☞ 源码
源码链接:GitHub仓库自取
使用方法:☟☟☟
以上是关于QtApplets-MyHook的主要内容,如果未能解决你的问题,请参考以下文章