当前位置: 首页 > 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]);}
}
http://www.lryc.cn/news/426750.html

相关文章:

  • 多个主流Python GUI库全面解析,助你用Python轻松构建精美界面
  • Kotlin学习-01创建kotlin学习
  • Java、python、php版的企业单位考勤打卡管理系统的设计与实现(源码、调试、LW、开题、PPT)
  • 在IntelliJ IDEA中使用Git推送项目
  • CNN代码实战
  • 迁移学习代码复现
  • Elasticsearch(ES)常用命令
  • C/C++ 不定参函数
  • C语言——函数专题
  • springboot打可执行jar包
  • 【SQL】科目种类
  • 【深度学习】【语音】TTS,最新TTS模型概览,扩散模型TTS,MeloTTS、StyleTTS2、Matcha-TTS
  • 【论文笔记】LION: Linear Group RNN for 3D Object Detection in Point Clouds
  • 打造高可用集群的基石:深度解析Keepalived实践与优化
  • Web大学生网页作业成品——环保主题介绍网页网站设计与实现(HTML+CSS)(5个页面)
  • Qt登录窗口设计
  • 探索数据矿藏:我的AI大模型与数据挖掘实战经验分享
  • linux C语言strcat函数及相关函数
  • 使用 sort 进行文本文件处理
  • HarmonyOS笔记4:从云数据库获取数据
  • QT5生成独立运行的exe文件
  • LabVIEW光纤水听器闭环系统
  • Shell——流程控制语句(if、case、for、while等)
  • 【redis的大key问题】
  • HighPoint SSD7749M2:128TB NVMe 存储卡实现28 GB/s高速传输
  • ARM 裸机与 Linux 驱动对比及 Linux 内核入门
  • 0101DNS TCP fallback on UDP query timeout disabled-redission-中间件
  • 位运算
  • MemFire Cloud是否真的可以取代后端
  • 数据结构(邓俊辉)学习笔记】优先级队列 06——完全二叉堆:批量建堆