当前位置: 首页 > wzjs >正文

襄樊网站推广参考消息网国内新闻

襄樊网站推广,参考消息网国内新闻,凡客网址,wordpress 数据库信息演示平台:windows。 编译环境:Qt5.12.2 MinGW 64-bit Windows API: ///加载钩子 /*** SetWindowsHookEx 函数解释* int idHook 所监控的挂钩类型* HOOKPROC lpfn 监控信息的处理函数* HINSTANCEhMod 监控信息的动态链接位置 nullptr则与本线…

演示平台:windows。
编译环境:Qt5.12.2 MinGW 64-bit
Windows API

///加载钩子
/*** SetWindowsHookEx 函数解释* int idHook 所监控的挂钩类型* HOOKPROC lpfn 监控信息的处理函数* HINSTANCEhMod 监控信息的动态链接位置 nullptr则与本线程相关* DWORD dwThreadId 挂钩线程id 0则代表当前 决定了此钩子是系统钩子还是线程钩子* 返回值 函数执行成功,则返回值就是该挂钩处理过程的句柄;若此函数执行失败,则返回值为NULL(0)*/
WINUSERAPI HHOOK WINAPI SetWindowsHookExW (int idHook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwThreadId);///SetWindowsHookExW的回调函数/*** @brief Hookproc* @param code 这是一个整数值,用于指定发送到钩子过程的消息类型。它可以是几个值中的一个,例如HC_ACTION、HC_NOREMOVE或HC_CREATE* @param wParam 一个指向宽字符值的指针,其中包含有关发送到钩子过程的消息的附加信息,其值取决于code的值* @param lParam 一个指向长字符值的指针,其中包含有关发送到钩子过程的消息的附加信息,其值取决于code的值* @return 如果返回0,则消息未被处理,将继续由其他钩子或目标窗口处理。如果返回非零值,则消息已被钩子过程处理,不会被其他钩子或目标窗口处理*/
LRESULT Hookproc2(int code, WPARAM wParam, LPARAM lParam)// 卸载钩子
WINUSERAPI WINBOOL WINAPI UnhookWindowsHookEx (HHOOK hhk);

WH_KEYBOARD_LL:键盘监测
WH_MOUSE_LL:鼠标检测
示例
请添加图片描述
代码
chook.h

#ifndef CHOOK_H
#define CHOOK_Hclass Widget;
class CHook
{
public:CHook(Widget* w);~CHook();
};#endif // CHOOK_H

chook.cpp

#include "chook.h"
#include <windows.h>
#include "widget.h"
#include <QDebug>Widget* g_w;
HHOOK g_hook1;  // 钩子对象
HHOOK g_hook2; // 钩子对象/*** @brief Hookproc* @param code 这是一个整数值,用于指定发送到钩子过程的消息类型。它可以是几个值中的一个,例如HC_ACTION、HC_NOREMOVE或HC_CREATE* @param wParam 一个指向宽字符值的指针,其中包含有关发送到钩子过程的消息的附加信息,其值取决于code的值* @param lParam 一个指向长字符值的指针,其中包含有关发送到钩子过程的消息的附加信息,其值取决于code的值* @return 如果返回0,则消息未被处理,将继续由其他钩子或目标窗口处理。如果返回非零值,则消息已被钩子过程处理,不会被其他钩子或目标窗口处理*/
LRESULT Hookproc1(int code, WPARAM wParam, LPARAM lParam)
{// lParam强转为键盘数据结构体KBDLLHOOKSTRUCT *data = (KBDLLHOOKSTRUCT *)lParam;//! GetAsyncKeyState//! 获取指定按钮状态:非0则为按下状态,为0则为未按下状态// 当Ctrl、Alt、X都按下时进入if(GetAsyncKeyState(VK_LCONTROL) && GetAsyncKeyState(VK_LMENU) && 0x58 == data->vkCode){g_w->setText("组合按钮按下:Ctrl+Alt+x");}else if(GetAsyncKeyState(VK_LCONTROL) && 0x5a == data->vkCode){g_w->setText("组合按钮按下:Ctrl+z");}else{QString txt;if (data->flags == 128 || data->flags == 129){// 监控按键状态if (code >= 0){switch (wParam){case WM_KEYDOWN:txt = "普通按键抬起" + QString::number(data->vkCode);break;case WM_KEYUP:txt = "普通按鍵按下" + QString::number(data->vkCode);break;case WM_SYSKEYDOWN:txt = "系统按键抬起" + QString::number(data->vkCode);break;case WM_SYSKEYUP:txt = "系统按键按下" + QString::number(data->vkCode);break;}}// 监控键盘,并判断键switch (data->vkCode){case VK_F1:txt = "检测到按键:F1";break;case VK_LCONTROL:txt = "检测到按键:Ctrl";break;case VK_LMENU:txt = "检测到按键:Alt";break;case VK_RETURN:txt = "检测到按键:Enter";break;case VK_RSHIFT:case VK_LSHIFT:txt = "检测到按键:Shift";break;case VK_BACK:txt =  "检测到按键:Backspace";break;case VK_SPACE:txt =  "检测到按键:Space";break;}g_w->setText(txt);}}return CallNextHookEx(g_hook1, code, wParam, lParam);
}LRESULT Hookproc2(int code, WPARAM wParam, LPARAM lParam)
{MSLLHOOKSTRUCT* data = (MSLLHOOKSTRUCT* )lParam;POINT   pt = data->pt;DWORD   mouseData = data->time;const char* info = NULL;char text[60], pData[50], mData[50];if (code >= 0){if (wParam == WM_MOUSEMOVE){info = "鼠标 [移动]";}else if (wParam == WM_LBUTTONDOWN){info = "鼠标 [左键] 按下";}else if (wParam == WM_LBUTTONUP){info = "鼠标 [左键] 抬起";}else if (wParam == WM_LBUTTONDBLCLK){info = "鼠标 [左键] 双击";}else if (wParam == WM_RBUTTONDOWN){info = "鼠标 [右键] 按下";}else if (wParam == WM_RBUTTONUP){info = "鼠标 [右键] 抬起";}else if (wParam == WM_RBUTTONDBLCLK){info = "鼠标 [右键] 双击";}else if (wParam == WM_MBUTTONDOWN){info = "鼠标 [滚轮] 按下";}else if (wParam == WM_MBUTTONUP){info = "鼠标 [滚轮] 抬起";}else if (wParam == WM_MBUTTONDBLCLK){info = "鼠标 [滚轮] 双击";}else if (wParam == WM_MOUSEWHEEL){info = "鼠标 [滚轮] 滚动";}ZeroMemory(text, sizeof(text));ZeroMemory(pData, sizeof(pData));ZeroMemory(mData, sizeof(mData));QString txt = QString("鼠标状态:%1,X:%2,Y:%3,附加数据:%4").arg(info).arg(pt.x).arg(pt.y).arg(mouseData);g_w->setText(txt);}return CallNextHookEx(g_hook2, code, wParam, lParam);
}CHook::CHook(Widget *w)
{g_w = w;//! SetWindowsHookEx 函数解释//! int idHook 所监控的挂钩类型//! HOOKPROC lpfn 监控信息的处理函数//! HINSTANCEhMod 监控信息的动态链接位置 nullptr则与本线程相关//! DWORD dwThreadId 挂钩线程id 0则代表当前 决定了此钩子是系统钩子还是线程钩子//! 返回值 函数执行成功,则返回值就是该挂钩处理过程的句柄;若此函数执行失败,则返回值为NULL(0)g_hook1 = SetWindowsHookEx(WH_KEYBOARD_LL, Hookproc1, nullptr, 0);g_hook2 = SetWindowsHookEx(WH_MOUSE_LL, Hookproc2, nullptr, 0);
}CHook::~CHook()
{// 卸载钩子UnhookWindowsHookEx(g_hook1);UnhookWindowsHookEx(g_hook2);
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "chook.h"
namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();void setText(QString txt);
private:Ui::Widget *ui;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QScrollBar>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);ui->textEdit->setReadOnly(true);
}Widget::~Widget()
{delete ui;
}void Widget::setText(QString txt)
{ui->textEdit->append(txt);ui->textEdit->verticalScrollBar()->setValue(ui->textEdit->verticalScrollBar()->maximum());
}

main.cpp

#include "widget.h"
#include <QApplication>
#include "chook.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;CHook hook(&w);w.show();return a.exec();
}
http://www.dtcms.com/wzjs/221178.html

相关文章:

  • jsp网站开发工资怎么做营销推广
  • 西宁市网站建设高端西安网络推广seo0515
  • 家具定制网站漯河seo公司
  • 建网站的价格朝阳网站建设公司
  • 连城县建设局网站西安发布最新通知
  • 自己电脑做网站 外网无法访问网络怎么做推广
  • 2023年二建报名网站官网登录qq群推广引流免费网站
  • 公司网站建设制作难么开网店怎么推广运营
  • 女和男做的视频网站百度网址大全在哪里找
  • 陕西手机网站建设百度站长平台快速收录
  • 西安网站维护 策划网店推广是什么
  • 湘西州住房和城乡建设局网站迅雷磁力链bt磁力天堂
  • 怎么做电脑网站后台网络seo关键词优化技术
  • wordpress半透明seo和sem分别是什么
  • 图标网站导航制作怎么做优质外链平台
  • 广西鼎汇建设集团有限公司网站北京seo优化哪家公司好
  • 自己做网站软件厦门网络推广外包多少钱
  • 学生做任务赚钱的网站小米口碑营销案例
  • extjs做的网站免费b站推广网站短视频
  • 丹东网站开发网页设计代码
  • 聊城住房和城乡建设委员会官方网站最好的免费推广平台
  • ui设计师面试必问问题外链seo服务
  • 三亚兼职招聘信息网站如何推广app
  • 杭州 企业 建网站2345浏览器网站进入
  • 公司管理类培训重庆高端网站seo
  • 手机网站建设的背景南京seo网络优化公司
  • 郑州seo培训班seo推广的全称是
  • 官方网站 建设情况汇报北京网站建设公司大全
  • 安徽网站建站系统平台深圳搜索引擎优化收费
  • 国内最新军事新闻最新消息优化模型有哪些