QtApplets-MyHook
QtApplets-MyHook
今天要演技的是在Qt下是使用Hook 钩子函数,主要就是项目需要在win平台下实现,需要屏蔽掉一些键盘组合按键,以防止用户杀死程序。
文章目录
- QtApplets-MyHook
- 1 新增注册表条目
- 2 键盘钩子过程
- 3 鼠标钩子过程
- 4 安装钩子
- 测试
- ☞ 源码
关键字:
屏蔽
、键盘
、鼠标
、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,则钩子子程就必须将该消息传递给 CallNextHookExif(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相关推荐
- webpack源码之tapable
引言 去年3月的时候当时写了一篇webpack2-update之路,到今天webpack已经到了4.2,更新挺快的,功能也在不断的完善,webpack4特性之一就是零配置, webpack生命力真的很 ...
- 深度理解目标检测(MMdetection)-HOOK机制
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|计算机视觉联盟 最近做了一段时间的目标检测,不得不说检测这 ...
- 如何正确关闭游戏服务器
一,如何正确的关闭游戏服务器 1,最简单粗爆的方法 在Linux系统上,使用ps -aux|grep java 可以查到所有运行的java程序的pid,即进程号,然后使用kill - 9 进程号,杀死 ...
- 使用钩子函数[3] - 建立一个全局的鼠标钩子
分两步: 一.建立 DLL, 并在 DLL 实现钩子的设置.释放和钩子函数; 二.再建一个工程调用测试. 第一步: 做 DLL 先建立一个 DLL 工程, 自动初始的代码如下(去掉注释了): libr ...
- 好玩的deep dream(清晰版,pytorch完整代码)
本文给出pytorch完整代码实现deep dream,加入了图像金字塔处理和高斯平滑处理,使生成图更加清晰美观.文中还讨论了各种因素对生成图的影响. 1, 完整代码 Deep dream图是 ...
- pytorch简单代码实现deep dream图(即CNN特征可视化 features visualization)
本文给出完整代码实现CNN特征的可视化输入图像,也就是简单的deep dream图,有助于更好的理解CNN工作原理,并掌握用梯度上升法生成满足要求输入图像的技术.更清晰美观的deep dream图 ...
- 基于python3写的源码剖析_Python 极简插件系统 pluggy 源码剖析
前言 本长文不适合手机端阅读,请酌情退出 公司架构组基于 pytest 自研了一套测试框架 sstest,目的是为了让业务组(也就是我在的组)更好的写单元测试,从而提高代码质量,单元测试的目的是为了回 ...
- frida的用法--Hook Java层类方法
frida是一款方便并且易用的跨平台Hook工具,使用它不仅可以Hook Java写的应用程序,而且还可以Hook原生的应用程序. 1. 准备 frida分客户端环境和服务端环境.在客户端我们可以编写 ...
- C#环境下的钩子详解
C#环境下的钩子详解 摘自网上供自己备查: http://www.csharpwin.com/csharpspace/2423.shtml 1. WINDOWS的消息机制 2. HOOK介绍 3. H ...
- 一篇文章带你领悟 Frida 的精髓(基于安卓8.1)
转载(一篇文章带你领悟Frida的精髓(基于安卓8.1)):https://www.freebuf.com/articles/system/190565.html <Frida操作手册>: ...
最新文章
- POSIX消息队列信号通知
- python3下载教程-Python3 教程
- 菜鸟学Java(十一)——GET与POST
- 最简单的nginx教程 - 如何把一个web应用部署到nginx上
- 阿里云神龙团队拿下TPCx-BB排名第一的背后技术
- 冒泡排序和选择排序的JAVA程序
- Sysfs_linux设备底层模型
- deeplung代码实现主题讲解
- 饭局潜规则,吃饭时的最大忌讳,就是低头玩手机
- python语言的实验心得体会_爱的五种语言——“好妈妈”培训班家教情商课课堂纪实!...
- NMS(非极大值抑制)算法 -- 理论、代码
- 拓端tecdat|约会数据动态可视化分析:R语言使用ggplot和ganimate制作的动画图
- opencv-python的人脸识别系统
- Java小项目 屏幕自定义尺寸GIF生成器V1.0
- 部分拆解笔记本电脑(联想y580)
- 新浪微博从 Kafka 到 Pulsar 的演变
- c语言char类型怎么输出,c语言中char类型数组的输出问题--输出时为何需要符?...
- RemoveWGA升级了
- 让物联网为“中国制造”插上腾飞的翅膀
- Learning to rank 小结