Hook鼠标和键盘的使用
今天项目中要用钩子程序,结果网上原理讲的挺好,但是代码好多都不好用,总结一下方便日后使用。
简介:
Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。
过程:
- 创建(安装)钩子:SetWindowsHookEx
- 使用回调函数:KeybdProc MouseProc CallNextHookEx(使用完成后要用这个函数将钩子传给后面)
- 释放钩子:CallNextHookEx
参考链接:
https://www.cnblogs.com/fanling999/p/4592740.html
https://www.cnblogs.com/chyshx/p/12614148.html
https://www.jianshu.com/p/3382cc765b39
鼠标事件常用宏定义:
WM_MOUSEMOVE 0x0200
WM_LBUTTONDOWN 0x0201
WM_LBUTTONUP 0x0202
WM_LBUTTONDBLCLK 0x0203
WM_RBUTTONDOWN 0x0204
WM_RBUTTONUP 0x0205
WM_RBUTTONDBLCLK 0x0206
WM_MBUTTONDOWN 0x0207
WM_MBUTTONUP 0x0208
WM_MBUTTONDBLCLK 0x0209
WM_MOUSEWHEEL 0x020A
例子:
#include "TextQtUi.h"
#include <Windows.h>
#include <iostream>
#include <string>using namespace std;HHOOK g_hMouse;//鼠标钩子全局变量
HHOOK g_hKeyb;//键盘钩子全局变量int b = 0;
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{b++;qDebug() << "KeybdProcb = " << b;//将消息向下一个钩子传递return CallNextHookEx(NULL, nCode, wParam, lParam);
}int a = 0;
LRESULT CALLBACK KeybdProc(int nCode, WPARAM wParam, LPARAM lParam)
{a++;KBDLLHOOKSTRUCT* pkbhs = (KBDLLHOOKSTRUCT*)lParam;if (nCode == HC_ACTION) {qDebug() << "KeybdProc a = " << a;}//将消息向下一个钩子传递return CallNextHookEx(NULL, nCode, wParam, lParam);
}void SetHook() {//钩子的安装if (g_hKeyb == nullptr) {g_hKeyb = SetWindowsHookEx(WH_KEYBOARD_LL, KeybdProc, nullptr, 0);}if (g_hMouse == nullptr) {g_hMouse = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, nullptr, 0);}
}void UnHook() {//卸载鼠标、键盘钩子if (g_hKeyb != nullptr){UnhookWindowsHookEx(g_hKeyb);g_hKeyb = nullptr;}if (g_hMouse != nullptr) {UnhookWindowsHookEx(g_hMouse);g_hMouse = nullptr;}
}TextQtUi::TextQtUi(QWidget* parent): QMainWindow(parent)
{ui.setupUi(this);connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(createHook()));connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(deleteHook()));
}void TextQtUi::createHook() {SetHook();
}void TextQtUi::deleteHook() {UnHook();
}
Hook鼠标和键盘的使用相关推荐
- 如何在C#中使用全局鼠标、键盘Hook
今天,有个同事问我,怎样在C#中使用全局钩子?以前写的全局钩子都是用unmanaged C或C++写个DLL来实现,可大家都知道,C#是基于.Net Framework的,是managed,怎么实现全 ...
- 全局钩子(hook鼠标键盘消息)
生成DLL文件,模块定义文件为: LIBRARY Hook EXPORTS SetHook @2 实现文件如下.其中g_hWnd为所有进程共享,并且绕过了系统对可写数据的写时复制机制,维护的是一份拷贝 ...
- .NET下如何拦截鼠标、键盘消息?Win32NET来帮你
Win32NET是一个Win32API的.NET下封装的类库,包含: 1: 常用win32的API的net封装 2:鼠标.键盘.热键hook钩子模块, 3:模拟键盘输入文字(支持各种字符文字.不同语言 ...
- c# 禁用鼠标与键盘
禁用鼠标与键盘有两种方法: 直接调用禁用API(缺点:按Ctrl+alt+delete,禁用会失效) ① 帮助类 public class BlockHelper{private static Log ...
- Selenium之鼠标和键盘操作及扩展
概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作. ...
- 首次使用计算机鼠标键盘不能用,解决方案:如何解决无法使用计算机鼠标和键盘的问题?如果启动后无法使用鼠标和键盘该怎么办?...
键盘和鼠标,作为计算机用户的日常生活中最频繁的人机交互设备,在日常使用中出现故障的频率也很高.在生活中经常会出现各种键盘和鼠标故障,反应迟钝和其他现象,从而干扰用户的正常工作和生活.发生这种情况时,编 ...
- python监听鼠标事件_Python中使用PyHook监听鼠标和键盘事件实例
Python 中使用 PyHook 监听鼠标和键盘事件实例 PyHook 是一个基于 Python 的"钩子"库,主要用于监 听当前电脑上鼠标和键盘的事件.这个库依赖于另一个 Py ...
- C# WPF 中用代码模拟鼠标和键盘的操作
C# WPF 中用代码模拟鼠标和键盘的操作 原文:C# WPF 中用代码模拟鼠标和键盘的操作 原文地址 C#开发者都知道,在Winform开发中,SendKeys类提供的方法是很实用的.但是可惜的是, ...
- js进阶 12-8 如何知道鼠标和键盘当前操作的是哪个键
js进阶 12-8 如何知道鼠标和键盘当前操作的是哪个键 一.总结 一句话总结:event.which属性. 1.如何获取事件发生的时间? timeStamp属性 event.timeStamp 属性 ...
最新文章
- Securing Session State
- 1027 Colors in Mars (20 分)_20行代码AC
- python无法安装pycurl_Python安装pycurl失败的解决方法
- 黑色响应式全屏滚动主页源码
- bzoj2208 [Jsoi2010]连通数
- 【es】Elasticsearch:inverted index,doc_values及source
- 手把手教你如何加入到github的开源世界!
- pwdx 查看进程启动时的工作目录
- Camera(2) camera i2c总线协议介绍
- 基于MATLAB函数mesh绘制由多张曲面围成的三维封闭曲面详解
- python判断两个矩形是否相交_使用Python判断线段是否与矩形相交
- 数学建模评价类方法02——层次分析法
- sqli-labs 前五关
- 锁定计算机后 360wifi,如何使360wifi关闭电脑后继续使?
- 佐治亚理工计算机科学录取,佐治亚理工学院计算机科学排名第4(2018年TFE美国排名)...
- php ascii过滤,php过滤ascii控制字符
- 不要随便借出你的帐号
- pe制作linux硬盘的镜像文件_如何快速生成PE ISO文件
- 逝者:Django贡献最多的核心开发者Malcolm Tredinnick
- 用 React+Redux+Immutable 做俄罗斯方块