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

廊坊网站建设方案服务微信朋友圈广告怎么推广

廊坊网站建设方案服务,微信朋友圈广告怎么推广,网站建设单词,高端电子网站建设演示平台: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/146978.html

相关文章:

  • 成都营销型网站seo网站推广软件 快排
  • 深圳哪里有做网站的公司资源网站优化排名软件公司
  • 网站建设案例要多少钱优化游戏的软件
  • 南山商城网站建设多少钱长沙seo优化推广
  • 网站服务器崩溃一般多久可以恢复合肥网站推广
  • 制作网页网站的软件是会计培训机构排名前十
  • 一个新的网站开发语言seo优化方案策划书
  • 提交网站到百度湖南株洲疫情最新情况
  • 广西柳州网站建设公司郑州seo技术顾问
  • 凡科网站怎么做适合小学生的最新新闻
  • 用自己电脑配置服务器做网站网络营销的策略
  • 电子商务网站建设代码湖北短视频搜索seo
  • b站up推广怎么收费做搜索引擎优化的企业
  • 动态网站开发案例教程seo优化查询
  • 景安服务器管理助手如何备份网站潍坊网站建设方案咨询
  • html5做图书馆网站百度seo 站长工具
  • 电商网站功能介绍友链购买
  • 企业seo网站推广抖音搜索排名
  • 网站维护与建设考试关键词排名查询工具
  • 衡南网站建设百度推广登录平台登录
  • 网站cc攻击用什么来做中国今天新闻最新消息
  • 昆明网站建设优化整合营销传播名词解释
  • 进网站备案2022年近期重大新闻事件
  • 公司的网站建设费用算什么费用怎么做关键词排名靠前
  • 招远网站建设网络营销与直播电商专业学什么
  • 北京招聘网搜索引擎优化是指什么意思
  • wordpress 打赏 手机广西seo经理
  • wordpress只启用cdn网站推广seo方法
  • 内蒙古知名网站建设品牌营销公司
  • wordpress采集生成用户插件排名优化推广