一、QT程序激活状态下的监控;
二、QT程序非激活状态下的监控
一、QT程序激活状态下的监控;
主要方法:重写键盘、鼠标事件(教程多,略过)
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event);
二、QT程序非激活状态下的监控
主要方法:HHOOK DLL
知识要点:
> 1.HOOK学习 2.生成DLL 3.调用DLL
1、HOOK过程
1.1定义static HHOOK hook
1.2安装SetWindowsHookEx(…)
1.3回调函数LRESULT CALLBACK HOOKProc(…)
1.4卸载UnhookWindowsHookEx(…)
1.1 安装钩子:SetWindowsHookEx原型
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowshookexw
HHOOK SetWindowsHookEx(
int idHook, //它是和钩子函数类型一一对应的。常用钩子函数类型如下:
//WH_KEYBOARD键盘钩子,WH_KEYBOARD_LL,不用新建dll即可捕获全局消息
//WH_MOUSE表示是鼠标钩子,WH_MOUSE_LL是低级鼠标钩子;
HOOKPROC lpfn, // 钩子函数的地址,名字可自己定义见1.2
HINSTANCE hMod, // 钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。
// https://blog.csdn.net/liu_yude/article/details/45949933
//HINSTANCE hInst= GetModuleHandle (0);获取当前应用程序实例
// ModuleFromAddress((PVOID)KeyboardHookPro
DWORD dwThreadId // 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。
);
1.2定义钩子: LRESULT CALLBACK HOOKProc()原型
LRESULT CALLBACK HookProc( //HookProc可自定义名字
int nCode, //nCode包含有关消息本身的信息;比如是否从消息队列中移出。
WPARAM wParam, //参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。
LPARAM lParam //参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。
);
CallNextHookEx.的原型如下:
LRESULT CallNextHookEx(
HHOOK hhk, //hhk是钩子句柄
int nCode,
WPARAM wParam,
LPARAM lParam
);
1.3卸载钩子:UnhookWindowsHookEx原型
BOOL UnhookWindowsHookEx(HHOOK hhk)
//mousehook.h
#ifndef MOUSEHOOK_H
#define MOUSEHOOK_H
#include
//1,开始都要先定义个钩子
static HHOOK hook;
//2安装钩子,这里是改成定义一个函数,函数里包含安装钩子函数;
int set_mousehook();
//3定义一个钩子函数指针
LRESULT CALLBACK mouseHook(int nCode,WPARAM wParam,LPARAM lParam);
//4卸载钩子,同样定义个函数
void unload_mousehook();
#endif // MOUSEHOOK_H
源文件
//mousehook.cpp
#include"mousehook.h"
#include
//1安装钩子,这里是改成定义一个函数,函数里包含安装钩子函数;
int set_mousehook(){
hook=SetWindowsHookExW(WH_MOUSE_LL,mouseHook,GetModuleHandle (0),NULL);
}
//2定义一个钩子函数指针
LRESULT CALLBACK mouseHook(int nCode,WPARAM wParam,LPARAM lParam){
if (wParam == WM_XBUTTONDOWN)
{
qDebug()<< wParam;
}
else if (wParam == WM_XBUTTONUP)
{
qDebug() << wParam;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
//3卸载钩子,同样定义个函数
void unload_mousehook(){
UnhookWindowsHookEx(hook);
}
下载资源:https://download.csdn.net/download/soso_coco/11115358