防摸鱼小软件——鼠标键盘检测器

为了防止室友偷偷用电脑学习,我用尽毕生所学写了一个检测鼠标键盘监测程序,实时监测室友的内卷情况。
该程序是用QT开发的,主要用到的技术是HOOK钩子、鼠标事件和键盘事件。该程序可以记录开机后,所有的键盘动作和鼠标动作(关机键除外),鼠标移动距离、系统开机时间、系统运行时间。基本防止了室友偷偷内卷。
下面是软件运行 的界面图:在这里插入图片描述
该软件只要将键盘鼠标钩子部分写好,基本就能完成该程序的开发。钩子相关代码如下:

在这里插入代码片#include "hook.h"
#include<QDebug>
#include<QEvent>
#ifdef Q_OS_WIN
Hook::Hook()
{

}
static int wheelNum=0;
static int rightNum=0;
static int leftNum=0;
static int midNum=0;
static int mouseNum=0;
static int keyHookNum=0;
static int mouseX=0;
static int mouseY=0;
static HHOOK keyHook=nullptr;
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    KBDLLHOOKSTRUCT *pkbhs=(KBDLLHOOKSTRUCT*)lParam;
    if(nCode == HC_ACTION)
    {
        keyHookNum++;
        return 0;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递
    }
    return CallNextHookEx(keyHook, nCode, wParam, lParam);
}
HHOOK mouseHook=NULL;
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{
    if(nCode == HC_ACTION) //当nCode等于HC_ACTION时,要求得到处理
    {
        if(wParam==WM_MOUSEWHEEL)//滑轮
        {
            wheelNum++;
            mouseNum++;
            return 0;
        }
        if(wParam==WM_RBUTTONDOWN)//鼠标右键按下
        {
            rightNum++;
            mouseNum++;
            return 0;
        }
        if(wParam==WM_LBUTTONDOWN)//鼠标左键按下
        {
            leftNum++;
            mouseNum++;
            return 0;
        }
        if(wParam==WM_MBUTTONDOWN)//中键按下
        {
            midNum++;
            mouseNum++;
            return 0;
        }
        if(wParam==WM_MOUSEMOVE)//鼠标的移动
        {
            MOUSEHOOKSTRUCT *mhookstruct;   //鼠标HOOK结构体
            mhookstruct = (MOUSEHOOKSTRUCT*)lParam;
            POINT pt = mhookstruct->pt;  //将当前鼠标坐标点的x,y坐标作为参数向主程序窗口发送消息
            mouseX=pt.x;
            mouseY=pt.y;
            return 0;
        }
    }
    return CallNextHookEx(mouseHook,nCode,wParam,lParam);//否则,如果返回给下一个钩子子程处理
}
void Hook::installmouseHook()
{
    mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,nullptr,0);//注册鼠标钩子
}
void Hook::unInstallHook()
{

    if(keyHook!=nullptr)
    {
        UnhookWindowsHookEx(keyHook);//键盘钩子句不为空时销毁掉
        keyHook=nullptr;
    }
    if(keyHook!=nullptr)
    {
        UnhookWindowsHookEx(keyHook);//键盘钩子句不为空时销毁掉
        keyHook=nullptr;
    }
}
int Hook::sendMouseSignal()
{
    return mouseNum;
}
int Hook::sendWheelSignal()
{
    return wheelNum;
}
int Hook::sendLeftSiganl()
{
    return leftNum;
}
int Hook::sendRightSignal()
{
    return rightNum;
}
int Hook::sendMidSignal()
{
    return midNum;
}
void Hook::installHook()
{
    keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,nullptr,0);
}
int Hook::sendSignal()
{
    return keyHookNum;
}
int Hook::sendmouseX()
{
    return mouseX;
}
int Hook::sendmouseY()
{
    return mouseY;
}
#endif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值