C++鼠标键盘操作自动化
C++鼠标键盘操作自动化
#pragma once
#include <Windows.h>
enum KEYS{A = 65,W=87,S=83,D=68,SHIFT=VK_LSHIFT,ALT=18,Tilde= 126,//~TAB=VK_TAB,B=66,SPACE=VK_SPACE,ESC=VK_ESCAPE,Q=81
};
enum MOUSE
{ML,MW,MR//左,中,右
};
class simulator//模拟器
{
public:simulator();simulator(const char* exepath);//启动应用程序static void Key_Down(KEYS key);//模拟键盘按键按下static void Key_UP(KEYS key);//模拟键盘按键抬起static void Key_Click(KEYS key, long mintime);//模拟按键瞬间按下一段时间后抬起static void Mouse_Down(MOUSE key);//模拟鼠标按下static void Mouse_UP(MOUSE key);//模拟鼠标抬起static void Mouse_Click(MOUSE key);//模拟鼠标点击static void Mouse_Move(int x, int y);//模拟鼠标移动x,y数值的距离static void Mouse_Wheel(int value);//模拟鼠标滚轮滚动static POINT Get_Mouse_Position();//得到鼠标位置static void Set_Mouse_Position(int x,int y);//设置鼠标位置static void Get_Mouse_Position(POINT & pos);//得到鼠标位置static void unload_devices();//卸载鼠标键盘,使其不可使用static void reload_devices();//重新启用鼠标键盘
};
class Debuger
{
public:static void print_pos(POINT &pos);static void test_mouse();static void show_all();
};
#include"simulator.h"
#include<stdlib.h>
#include <shlobj.h>
#include<SetupAPI.h>
#include <devguid.h>#pragma comment (lib, "setupapi.lib")
#pragma warning(disable:4996)
extern "C"
{
#include<stdio.h>
}
simulator::simulator()
{
}simulator::simulator(const char * exepath)
{ShellExecute(0, "open", exepath, "", "", 1);
}void simulator::Key_Down(KEYS key)
{keybd_event(key, 0, 0, 0);
}void simulator::Key_UP(KEYS key)
{keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
}void simulator::Key_Click(KEYS key, long mintime)
{Key_Down(key);if (mintime > 0){Sleep(mintime);}Key_UP(key);
}void simulator::Mouse_Down(MOUSE key)
{switch (key){case ML:{mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);}break;case MW:{mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);}break;case MR:{mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);}break;}
}void simulator::Mouse_UP(MOUSE key)
{switch (key){case ML:{mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);}break;case MW:{mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);}break;case MR:{mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);}break;}
}void simulator::Mouse_Click(MOUSE key)
{switch (key){case ML:{mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);}break;case MW:{mouse_event(MOUSEEVENTF_MIDDLEDOWN|MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);}break;case MR:{mouse_event(MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);}break;}
}void simulator::Mouse_Move(int x, int y)
{mouse_event( MOUSEEVENTF_MOVE, x, y, 0, 0);
}void simulator::Mouse_Wheel(int value)
{mouse_event(MOUSEEVENTF_WHEEL, 0, 0, value, 0);
}POINT simulator::Get_Mouse_Position()
{POINT out;GetCursorPos(&out);return out;
}void simulator::Set_Mouse_Position(int x, int y)
{SetCursorPos(x, y);
}void simulator::Get_Mouse_Position(POINT & pos)
{GetCursorPos(&pos);
}void simulator::unload_devices()
{
}void simulator::reload_devices()
{
}void Debuger::print_pos(POINT & pos)
{printf("x:%d y:%d", pos.x, pos.y);
}void Debuger::test_mouse()
{POINT pt;while (1){simulator::Get_Mouse_Position(pt);Debuger::print_pos(pt);Sleep(1000);}
}void SetDeviceStatus(bool bStatusFlag)
{SP_DEVINFO_DATA DeviceInfoData;DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);//GUID guid;HDEVINFO hDevInfo;// 得到设备 HDEVINFO hDevInfo = SetupDiGetClassDevs(&(GUID_DEVCLASS_KEYBOARD), 0, 0, DIGCF_PRESENT );if (hDevInfo == INVALID_HANDLE_VALUE){return;}int index = 0;while (SetupDiEnumDeviceInfo(hDevInfo, index++, &DeviceInfoData)){TCHAR szDescBuf[MAX_PATH] = { 0 };//获取设备描述信息if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szDescBuf, MAX_PATH - 1, NULL)){///*continue*/;return;}puts(szDescBuf);SP_PROPCHANGE_PARAMS propChange;propChange.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);propChange.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;propChange.Scope = DICS_FLAG_GLOBAL;propChange.StateChange = bStatusFlag ? DICS_START : DICS_STOP;propChange.HwProfile = 0;if (SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)&propChange, sizeof(propChange))){puts("succ");SetupDiChangeState(hDevInfo, &DeviceInfoData);}printf("%d\n", GetLastError());}//初始化属性SetupDiDestroyDeviceInfoList(hDevInfo);
}
void Debuger::show_all()
{/*SetDeviceStatus(false);Sleep(6000);SetDeviceStatus(true);*/SP_DEVINFO_DATA DeviceInfoData;DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);GUID guid;HDEVINFO hDevInfo;// 得到设备 HDEVINFO hDevInfo = SetupDiGetClassDevs(&(GUID_DEVCLASS_KEYBOARD), 0, 0, DIGCF_PRESENT );for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++){TCHAR szClassBuf[MAX_PATH] = { 0 };TCHAR szDescBuf[MAX_PATH] = { 0 };TCHAR szDriver[MAX_PATH] = { 0 };TCHAR szFriName[MAX_PATH] = { 0 };// 获取类名 if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS, NULL, (PBYTE)szClassBuf, MAX_PATH - 1, NULL)){///*continue*/;return;}puts(szClassBuf);//获取设备描述信息if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szDescBuf, MAX_PATH - 1, NULL)){///*continue*/;return;}puts(szDescBuf);//获取设备驱动名if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER, NULL, (PBYTE)szDriver, MAX_PATH - 1, NULL)){///*continue*/;return;}puts(szDriver);printf("%x %x %x ", DeviceInfoData.ClassGuid.Data1, DeviceInfoData.ClassGuid.Data2, DeviceInfoData.ClassGuid.Data3);for (int i = 0; i < 8; i++)printf("%x ", DeviceInfoData.ClassGuid.Data4[i]);}
}
相关文章:
C++鼠标键盘操作自动化
C鼠标键盘操作自动化 #pragma once #include <Windows.h> enum KEYS{A 65,W87,S83,D68,SHIFTVK_LSHIFT,ALT18,Tilde 126,//~TABVK_TAB,B66,SPACEVK_SPACE,ESCVK_ESCAPE,Q81 }; enum MOUSE {ML,MW,MR//左,中,右 }; class simulator//模拟器 { pu…...
多个主流Python GUI库全面解析,助你用Python轻松构建精美界面
Python 作为一门易学易用的编程语言,在各个领域都拥有广泛的应用。而 GUI (Graphical User Interface) 编程更是让 Python 变得更加灵活,可以帮助我们创建各种各样的桌面应用,为用户提供直观的交互体验。本文将介绍几个Python GUI 编程中常用…...
Kotlin学习-01创建kotlin学习
安装idea https://www.jetbrains.com/zh-cn/ 创建项目 选择kotlin 修改Main.kt fun main() {print("Hello World!") }运行...
Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...
在IntelliJ IDEA中使用Git推送项目
去gitee网站注册用户 gitee网站地址:https://gitee.com/ github网站地址:https://github.com/ 一、创建仓库 以下以gitee为例进行介绍,github操作雷同。 1、创建仓库 点击页面右上方的"“并选择"创建仓库” 2、设置仓库相关信息 首先输入仓库名&…...
CNN代码实战
CNN的原理 从 DNN 到 CNN (1)卷积层与汇聚 ⚫ 深度神经网络 DNN 中,相邻层的所有神经元之间都有连接,这叫全连接;卷积神经网络 CNN 中,新增了卷积层(Convolution)与汇聚(…...
迁移学习代码复现
一、前言 说来可能令人难以置信,迁移学习技术在实践中是非常简单的,我们仅需要保留训练好的神经网络整体或者部分网络,再在使用迁移学习的情况下把保留的模型重新加载到内存中,就完成了迁移的过程。之后,我们就可以像训练普通神经网络那样训练迁移过来的神经网络了。 我们…...
Elasticsearch(ES)常用命令
常用运维命令 一、基本命令1.1、查看集群的健康状态1.2、查看节点信息1.3、查看索引列表1.4、创建索引1.5、删除索引1.6、关闭索引1.7、打开索引1.8、查看集群资源使用情况(各个节点的状态,包括磁盘,heap,ram的使用情况࿰…...
C/C++ 不定参函数
C语言不定参函数 函数用法总结 Va_list 作用:类型定义,生命一个变量,该变量被用来访问传递给不定参函数的可变参数列表用法:供后续函数进调用,通过该变量访问参数列表 typedefchar* va_list; va_start 作用ÿ…...
C语言——函数专题
1.概念 在C语言中引入函数的概念,有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码,这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数:库函数和自定义函数。 2.库函数 C语言国际标准ANSIC规定了一些常…...
springboot打可执行jar包
1. pom文件如下 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><m…...
【SQL】科目种类
目录 题目 分析 代码 题目 表: Teacher ------------------- | Column Name | Type | ------------------- | teacher_id | int | | subject_id | int | | dept_id | int | ------------------- 在 SQL 中,(subject_id, dept_id) 是该表的主键。 该表…...
【深度学习】【语音】TTS,最新TTS模型概览,扩散模型TTS,MeloTTS、StyleTTS2、Matcha-TTS
文章目录 基础介绍对比基础介绍 MeloTTS: MeloTTS 是 MyShell.ai 开发的一个多语言语音合成模型,支持包括英语、西班牙语、法语、中文、日语和韩语等多种语言。它以高质量的语音合成为特色,尤其擅长处理中英混合内容。该模型优化了在 CPU 上的实时推理能力,使其在多种应用场…...
【论文笔记】LION: Linear Group RNN for 3D Object Detection in Point Clouds
原文链接:https://arxiv.org/abs/2407.18232 简介:Transformer在3D点云感知任务中有二次复杂度,难以进行长距离关系建模。线性RNN则计算复杂度较低,适合进行长距离关系建模。本文提出基于窗口的网络线性组RNN(即对分组…...
打造高可用集群的基石:深度解析Keepalived实践与优化
高可用集群 集群类型 集群类型主要分为负载均衡集群(LB)、高可用集群(HA)和高性能计算集群(HPC)三大类。每种集群类型都有其特定的应用场景和优势。 1. 负载均衡集群(LB) 负载均衡集…...
Web大学生网页作业成品——环保主题介绍网页网站设计与实现(HTML+CSS)(5个页面)
🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…...
Qt登录窗口设计
widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…...
探索数据矿藏:我的AI大模型与数据挖掘实战经验分享
🚀 探索数据矿藏:我的AI大模型与数据挖掘实战经验分享 💖 前言:数据的金矿,AI的翅膀 在人工智能的浪潮中,我有幸作为项目负责人,带领团队深入挖掘数据的潜力,利用AI大模型的力量&am…...
linux C语言strcat函数及相关函数
讯飞星火 strcat函数是C语言中的一个字符串处理函数,用于将一个字符串追加到另一个字符串的末尾。它的原型如下: char *strcat(char *dest, const char *src);参数说明: dest:目标字符串,即要将src字符串追加到这个字符串的末尾。src:源字符串,即要追加到dest字符串末…...
使用 sort 进行文本文件处理
sort 使用经验笔记 一、简介 sort 是一个命令行工具,用于对文本文件中的行进行排序。它广泛应用于 Unix/Linux 系统中,可以用来对文件的内容进行简单的排序操作,也可以与其他命令结合使用来完成更复杂的任务。 二、基本用法 排序文件: sor…...
HarmonyOS笔记4:从云数据库获取数据
移动应用获取数据的方式主要有: 1.从网络中获取数据接口API。 2.从华为云数据库获取云数据库的资源。 3.从移动终端直接获取本地的数据 在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中,将讨论从云数据库中获取数据。 因…...
QT5生成独立运行的exe文件
目录 1 生成独立运行的exe文件1.1 设置工程Release版本可执行文件存储路径1.2 将工程编译成Release版本 2 使用QT5自带的windeployqt拷贝软件运行依赖项3 将程序打包成一个独立的可执行软件exe4 解决QT5 This application failed to start because no Qt platform plugin could…...
LabVIEW光纤水听器闭环系统
开发了一种利用LabVIEW软件开发的干涉型光纤水听器闭环工作点控制系统。该系统通过调节光源频率和非平衡干涉仪的光程差,实现了工作点的精确控制,从而提高系统的稳定性和检测精度,避免了使用压电陶瓷,使操作更加简便。 项目背景 …...
Shell——流程控制语句(if、case、for、while等)
在 Shell 编程中,流程控制语句用于控制脚本的执行顺序和逻辑。这些语句包括 if、case、for、while 等,它们的使用可以使脚本实现更复杂的逻辑。以下是它们的详细说明和语法结构: 1. if 语句 if 语句用于条件判断,执行符合条件的…...
【redis的大key问题】
在使用 Redis 的过程中,如果未能及时发现并处理 Big keys(下文称为“大Key”),可能会导致服务性能下降、用户体验变差,甚至引发大面积故障。 本文将介绍大Key产生的原因、其可能引发的问题及如何快速找出大Key并将其优…...
HighPoint SSD7749M2:128TB NVMe 存储卡实现28 GB/s高速传输
HighPoint Technologies推出了一款全新的SSD7749M2 RAID卡,能够在标准的桌面工作站中安装多达16个M.2 SSD,实现高达128TB的闪存存储。该卡通过PCIe Gen4 x16接口提供高达28 GB/s的顺序读写性能。这些令人瞩目的性能规格伴随着高昂的价格标签。 #### 技术…...
ARM 裸机与 Linux 驱动对比及 Linux 内核入门
目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…...
0101DNS TCP fallback on UDP query timeout disabled-redission-中间件
文章目录 1.问题描述2.临时解决方案 结语 1.问题描述 Springcloud 项目,微服务模块使用redission,启动报错 DNS TCP fallback on UDP query timeout disabled. Upgrade Netty to 4.1.105 or higher.相关软件版本如下 软件版本描述springboot2.7.18spr…...
位运算
x1010 原码:000...1010 (一共32位) 反码:111...0101 (~x) 补码:111...0110 (反码1)(-x) 1、n 的二进制表示中第 k 位是几 #include<iost…...
MemFire Cloud是否真的可以取代后端
近年来,随着前端技术的迅速发展,前端工程师们越来越多地开始思考一个问题:“我还能不能不依赖后端?” 这种想法并非空穴来风,尤其是随着像MemFire Cloud这样的工具出现,它不仅能让开发者在没有后端的情况下…...
江门网站推广排名/天津seo优化排名
一、default关键字 default关键字,并不是访问修饰符中的default(默认的访问权限,不加public、private、protected访问修饰符的情况自动使用,同一包下的类可以访问字段),而是Java8的新特性,defa…...
怎样在网站上做有效的广告投放/网络营销有哪些
人生如逆旅,我亦是行人。 https://user-gold-cdn.xitu.io/2019/1/14/1684b3f12a6bb06f?w4896&h3264&fjpeg&s1620164前言 Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的…...
网站wordpress/黄页网站推广
0. 前言在上一个系列中,我们初步浏览了一下C#的基础知识。这句话的意思就是C#基础知识系列完结了,撒花。当然,并不是因为C#已经讲完了。正是因为我们轻轻地叩开了那扇门,才能看到门后面那瑰丽的世界。那么,门后面有什么…...
网站一片空白/百度网络优化推广公司
(1)基本特性的概念 特性是一种很特殊的类型,特性提供功能强大的方法,它可以加载到程序集的类型中,而它的类型包括有模块,类,接口,构造函数,方法参数...... (…...
学做网站好学吗/自己如何做链接推广
文章目录1. HTTP内容协商1.1 什么是内容协商1.2 内容协商的分类1.3 为什么需要内容协商1.4 内容协商标头1.4.1 Accept(客户端能够接收的MIME类型)1.4.2 Accept-Charset(客户端能够接受的字符编码)1.4.3 Accept-Encoding࿰…...
咸宁网站建设哪家好/东莞全网推广
1、一旦安装HP-ALM成功,ALM可以如下图所示,在开始菜单中启动,如下图所示: 2、安装后,我们还可以通过给将被打开,如下图所示在InternetExplorer和ALM以下URL启动ALM。网址URL:http://localhost:8…...