QT后台监控键盘和鼠标

目录

一、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)

例子:后台监控鼠标侧键(最重要的函数GetModuleHandle (0))

//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

你可能感兴趣的:(QT)