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

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//左&#xff0c;中&#xff0c;右 }; class simulator//模拟器 { pu…...

多个主流Python GUI库全面解析,助你用Python轻松构建精美界面

Python 作为一门易学易用的编程语言&#xff0c;在各个领域都拥有广泛的应用。而 GUI (Graphical User Interface) 编程更是让 Python 变得更加灵活&#xff0c;可以帮助我们创建各种各样的桌面应用&#xff0c;为用户提供直观的交互体验。本文将介绍几个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)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…...

在IntelliJ IDEA中使用Git推送项目

去gitee网站注册用户 gitee网站地址:https://gitee.com/ github网站地址:https://github.com/ 一、创建仓库 以下以gitee为例进行介绍&#xff0c;github操作雷同。 1、创建仓库 点击页面右上方的"“并选择"创建仓库” 2、设置仓库相关信息 首先输入仓库名&…...

CNN代码实战

CNN的原理 从 DNN 到 CNN &#xff08;1&#xff09;卷积层与汇聚 ⚫ 深度神经网络 DNN 中&#xff0c;相邻层的所有神经元之间都有连接&#xff0c;这叫全连接&#xff1b;卷积神经网络 CNN 中&#xff0c;新增了卷积层&#xff08;Convolution&#xff09;与汇聚&#xff08…...

迁移学习代码复现

一、前言 说来可能令人难以置信,迁移学习技术在实践中是非常简单的,我们仅需要保留训练好的神经网络整体或者部分网络,再在使用迁移学习的情况下把保留的模型重新加载到内存中,就完成了迁移的过程。之后,我们就可以像训练普通神经网络那样训练迁移过来的神经网络了。 我们…...

Elasticsearch(ES)常用命令

常用运维命令 一、基本命令1.1、查看集群的健康状态1.2、查看节点信息1.3、查看索引列表1.4、创建索引1.5、删除索引1.6、关闭索引1.7、打开索引1.8、查看集群资源使用情况&#xff08;各个节点的状态&#xff0c;包括磁盘&#xff0c;heap&#xff0c;ram的使用情况&#xff0…...

C/C++ 不定参函数

C语言不定参函数 函数用法总结 Va_list 作用&#xff1a;类型定义&#xff0c;生命一个变量&#xff0c;该变量被用来访问传递给不定参函数的可变参数列表用法&#xff1a;供后续函数进调用&#xff0c;通过该变量访问参数列表 typedefchar* va_list; va_start 作用&#xff…...

C语言——函数专题

1.概念 在C语言中引入函数的概念&#xff0c;有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码&#xff0c;这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数&#xff1a;库函数和自定义函数。 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 中&#xff0c;(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

原文链接&#xff1a;https://arxiv.org/abs/2407.18232 简介&#xff1a;Transformer在3D点云感知任务中有二次复杂度&#xff0c;难以进行长距离关系建模。线性RNN则计算复杂度较低&#xff0c;适合进行长距离关系建模。本文提出基于窗口的网络线性组RNN&#xff08;即对分组…...

打造高可用集群的基石:深度解析Keepalived实践与优化

高可用集群 集群类型 集群类型主要分为负载均衡集群&#xff08;LB&#xff09;、高可用集群&#xff08;HA&#xff09;和高性能计算集群&#xff08;HPC&#xff09;三大类。每种集群类型都有其特定的应用场景和优势。 1. 负载均衡集群&#xff08;LB&#xff09; 负载均衡集…...

Web大学生网页作业成品——环保主题介绍网页网站设计与实现(HTML+CSS)(5个页面)

&#x1f389;&#x1f389;&#x1f389; 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…...

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大模型与数据挖掘实战经验分享

&#x1f680; 探索数据矿藏&#xff1a;我的AI大模型与数据挖掘实战经验分享 &#x1f496; 前言&#xff1a;数据的金矿&#xff0c;AI的翅膀 在人工智能的浪潮中&#xff0c;我有幸作为项目负责人&#xff0c;带领团队深入挖掘数据的潜力&#xff0c;利用AI大模型的力量&am…...

linux C语言strcat函数及相关函数

讯飞星火 strcat函数是C语言中的一个字符串处理函数,用于将一个字符串追加到另一个字符串的末尾。它的原型如下: char *strcat(char *dest, const char *src);参数说明: dest:目标字符串,即要将src字符串追加到这个字符串的末尾。src:源字符串,即要追加到dest字符串末…...

使用 sort 进行文本文件处理

sort 使用经验笔记 一、简介 sort 是一个命令行工具&#xff0c;用于对文本文件中的行进行排序。它广泛应用于 Unix/Linux 系统中&#xff0c;可以用来对文件的内容进行简单的排序操作&#xff0c;也可以与其他命令结合使用来完成更复杂的任务。 二、基本用法 排序文件: sor…...

Wand-Enhancer终极指南:3步免费解锁WeMod Pro高级功能的完整方案

Wand-Enhancer终极指南&#xff1a;3步免费解锁WeMod Pro高级功能的完整方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的订阅费…...

MSP430 FRAM技术解析与嵌入式存储优化实践

1. MSP430 MCU存储技术迁移背景在嵌入式系统设计中&#xff0c;微控制器(MCU)的非易失性存储技术选择直接影响产品性能和开发效率。传统Flash存储器虽然成本低廉&#xff0c;但其写入速度慢&#xff08;需先擦除后写入&#xff09;、功耗高&#xff08;需要电荷泵&#xff09;和…...

基于Hive的淘宝用户购物行为数据分析及可视化

第1章 绪论1.1 课题背景互联网技术迅猛发展&#xff0c;电子商务平台聚集了庞大的用户数据&#xff0c;其中包含着大量的用户行为信息以及消费习惯。淘宝是中国最大的电子商务平台之一&#xff0c;其用户购物行为数据具有很高的研究价值。在大数据的背景下&#xff0c;怎样对数…...

Chunkhound:基于语义块与统一IR的智能代码理解框架解析

1. 项目概述&#xff1a;从“代码块猎犬”到智能代码理解 最近在琢磨一个挺有意思的开源项目&#xff0c;叫 chunkhound/chunkhound 。光看名字&#xff0c;你可能会联想到某种嗅觉灵敏的猎犬&#xff0c;没错&#xff0c;它的定位就是代码世界里的“猎犬”&#xff0c;专门负…...

量子退火误差缓解:经典阴影与局部虚拟纯化技术

1. 量子退火中的误差挑战与经典阴影方法量子退火&#xff08;Quantum Annealing, QA&#xff09;作为量子计算领域的重要算法&#xff0c;在优化问题求解中展现出独特优势。然而&#xff0c;实际硬件实现时面临的退相干问题严重制约了其计算精度。传统量子纠错方案需要大量物理…...

企业内部分享Taotoken在代码审查与生成场景下的应用实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内部分享Taotoken在代码审查与生成场景下的应用实践 在软件开发团队中&#xff0c;代码审查与代码生成是提升代码质量、保障项…...

从零实现大语言模型:Transformer架构、自注意力机制与PyTorch实战

1. 项目概述&#xff1a;从零构建大语言模型的实践指南 最近几年&#xff0c;大语言模型&#xff08;LLM&#xff09;无疑是技术领域最耀眼的存在。从ChatGPT的横空出世到各类开源模型的百花齐放&#xff0c;它们展现出的理解和生成能力令人惊叹。然而&#xff0c;对于许多开发…...

LLM Wiki带火的「知识预编译」,Graphify能直接落地企业知识库吗?

你是不是也跟着 LLM Wiki、Graphify 的热度&#xff0c;兴冲冲试过用「知识预编译」改造企业知识库&#xff1f;一落地却发现&#xff0c;要么权限兜不住敏感数据&#xff0c;要么溯源找不到具体条款&#xff0c;要么上万份文档跑起来成本直接炸锅 —— 网红项目的「个人最佳实…...

Python 代码优化:核心技巧与模式

Python 代码优化&#xff1a;核心技巧与模式 1. 技术分析 1.1 代码优化原则 代码优化需要遵循以下原则&#xff1a; 优化原则先测量后优化: 避免盲目优化保持可读性: 不要为了性能牺牲代码质量优先算法优化: 算法层面的优化效果最显著考虑空间换时间: 合理使用缓存1.2 常见性能…...

为什么你的民族志写作总卡在“分析乏力”?NotebookLM三步穿透文本深层文化逻辑

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的民族志写作总卡在“分析乏力”&#xff1f;NotebookLM三步穿透文本深层文化逻辑 民族志写作常陷入“描述丰富、解释单薄”的困境——田野笔记堆叠如山&#xff0c;却难以提炼出文化实践背后的…...