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

在没有源程序的情况时,如何通过控制鼠标按钮控制电脑exe程序?

有时候想控制第三方软件,但是没有源程序,可以控制鼠标键盘自动操作软件达到我们想要的目的

首先建一个功能类包含窗口控制,鼠标控制和输入控制等


```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace 进程程序名
{public class Win32Api{[DllImport("user32.dll", SetLastError = true)]static extern IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]public static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);[DllImport("user32.dll", SetLastError = true)]public static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);[DllImport("user32.dll", SetLastError = true)]public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);public static IntPtr FindWindowByCaption(string caption){return FindWindow(null, caption);}public static IntPtr FindWindowByClassName(string className){return FindWindow(className, null);}}public enum SW{HIDE = 0,SHOW_NORMAL = 1,SHOW_MINIMIZED = 2,MAXIMIZE = 3,SHOW_MAXIMIZED = 3,SHOW_NO_ACTIVE = 4,SHOW = 5,MINIMIZE = 6,SHOW_MIN_NO_ACTIVE = 7,SHOW_NA = 8,RESTORE = 9,SHOW_DEFAULT = 10,FORCE_MINIMIZE = 11}public enum WMessages : int{WM_KEYDOWN = 0x100,WM_KEYUP = 0x101,WM_CHAR = 0x102,WM_LBUTTONDOWN = 0x201, //Left mousebutton downWM_LBUTTONUP = 0x202,   //Left mousebutton upWM_LBUTTONDBLCLK = 0x203, //Left mousebutton doubleclickWM_RBUTTONDOWN = 0x204, //Right mousebutton downWM_RBUTTONUP = 0x205,   //Right mousebutton upWM_RBUTTONDBLCLK = 0x206, //Right mousebutton doWM_CUT = 0x300,WM_COPY = 0x301,WM_PASTE = 0x302,WM_CLEAR = 0x303}public enum Functions : int{KEYEVENTF_KEYDOWN = 0x0000, // New definitionKEYEVENTF_EXTENDEDKEY = 0x0001, //Key down flagKEYEVENTF_KEYUP = 0x0002, //Key up flagVK_LCONTROL = 0xA2, //Left Control key codeA = 0x41, //A key codeC = 0x43, //C key code}}
再写一个实际应用,根据实际软件大小和位置设置相应的控制点位using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 进程程序名
{public class 进程程序名{public Process 进程程序名{get => Process.GetProcessesByName("进程程序名").FirstOrDefault(i => i.MainWindowHandle != IntPtr.Zero); }public void SendMsg(string msg){if(SunnyLink==null){Console.WriteLine("请打开SunnyLink窗口,之后重试!");return;}if(string.IsNullOrEmpty(msg)){Console.WriteLine("发送的字符为空!");return;}var x = 357;var y = 540;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Clipboard.SetText(msg);Task.Delay(1).Wait();//复制Win32Api.keybd_event((byte)Functions.VK_LCONTROL, 0, (int)Functions.KEYEVENTF_KEYDOWN, 0);Task.Delay(100).Wait();Win32Api.PostMessage(SunnyLink.MainWindowHandle, (int)WMessages.WM_KEYDOWN, (int)System.Windows.Forms.Keys.V, 0);Task.Delay(1).Wait();Win32Api.keybd_event((byte)Functions.VK_LCONTROL, 0, (int)Functions.KEYEVENTF_KEYUP, 0);//发送消息Task.Delay(500).Wait();x = 920; y = 570;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));x = 940; y = 610;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Task.Delay(100).Wait();}public void FindUser(string msg){if (SunnyLink == null){Console.WriteLine("请打开目标程序窗口,之后重试!");return;}var x = 98;var y = 26;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Clipboard.SetText(msg);Task.Delay(100).Wait();//复制Win32Api.keybd_event((byte)Functions.VK_LCONTROL, 0, (int)Functions.KEYEVENTF_KEYDOWN, 0);Task.Delay(100).Wait();Win32Api.PostMessage(SunnyLink.MainWindowHandle, (int)WMessages.WM_KEYDOWN, (int)System.Windows.Forms.Keys.V, 0);Task.Delay(1).Wait();Win32Api.keybd_event((byte)Functions.VK_LCONTROL, 0, (int)Functions.KEYEVENTF_KEYUP, 0);Task.Delay(2000).Wait();//选择用户x = 321; y = 159;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Task.Delay(100).Wait();}public void sendMsg(Image image){if (SunnyLink == null){Console.WriteLine("请打开目标程序窗口,之后重试!");return;}var x = 357;var y = 540;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Clipboard.SetImage(image); Task.Delay(10).Wait();//复制Win32Api.keybd_event((byte)Functions.VK_LCONTROL, 0, (int)Functions.KEYEVENTF_KEYDOWN, 0);Task.Delay(100).Wait();Win32Api.PostMessage(SunnyLink.MainWindowHandle, (int)WMessages.WM_KEYDOWN, (int)System.Windows.Forms.Keys.V, 0);Task.Delay(1).Wait();Win32Api.keybd_event((byte)Functions.VK_LCONTROL, 0, (int)Functions.KEYEVENTF_KEYUP, 0);//发送消息Task.Delay(100).Wait();x = 920; y = 570;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));x = 940; y = 610;Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONDOWN, 0, x + (y << 16));Win32Api.PostMessage(SunnyLink.MainWindowHandle, (uint)WMessages.WM_LBUTTONUP, 0, x + (y << 16));Task.Delay(100).Wait();}}
}运行测试class Program{[STAThreadAttribute]static void Main(string[] args){SunnyLinker sunnyLinker = new SunnyLinker();//找到用户进程程序名.FindUser("1234567");//发送文本for (int i = 0; i < 50; i++){进程程序名.SendMsg($"[雪花][雪花][雪花]");进程程序名.SendMsg($"你好{i}");}//发送图片Image img = Image.FromFile("img.jpeg");进程程序名.sendMsg(img);}}

相关文章:

在没有源程序的情况时,如何通过控制鼠标按钮控制电脑exe程序?

有时候想控制第三方软件&#xff0c;但是没有源程序&#xff0c;可以控制鼠标键盘自动操作软件达到我们想要的目的 首先建一个功能类包含窗口控制&#xff0c;鼠标控制和输入控制等 csharp using System; using System.Collections.Generic; using System.Linq; using System.…...

如何排查GD32 MCU复位是由哪个复位源导致的?

上期为大家讲解了GD32 MCU复位包括电源复位和系统复位&#xff0c;其中系统复位还包括独立看门狗复位、内核软复位、窗口看门狗复位等&#xff0c;在一个GD32系统中&#xff0c;如果莫名其妙产生了MCU复位&#xff0c;如何排查具体是由哪个复位源导致的呢&#xff1f; GD32 MC…...

【C算法】编程初学者入门训练140道(1~20)

牛客编程初学者入门训练150题 BC1 实践出真知BC2 我是大VBC3 有容乃大BC6 小飞机BC7 缩短二进制BC8 十六进制转十进制BC9 printf的返回值BC10 成绩输入输出BC11 学生基本信息输入输出BC12 字符圣诞数BC13 ASCII 码BC14 出生日期输入输出BC15 按照格式输入并交换输出BC16 字符转…...

消息队列-rabbitmq(生产者.消费者. 消息.可靠性)

生产者者的可靠性 为了保证我们生产者在发送消息的时候消息不丢失&#xff0c;我们需要保证发送者的可靠性 1.生产者重试 假如发送消息的时候消息丢失 &#xff0c;我们可以使用发送者 重试机制&#xff0c;尝试重新发送消息 实现该机制非常简单&#xff0c;只需要在yml文…...

《InheriBT行为树》For Unity

InheriBT: Unity Editor中的行为树编辑框架 行为树&#xff08;Behavior Tree&#xff09;是一种广泛应用于人工智能&#xff08;AI&#xff09;领域的决策模型&#xff0c;特别是在游戏开发中。行为树通过分层结构和节点的组合&#xff0c;实现了复杂行为的简洁表达。然而&am…...

黑马头条Day11- 实时计算热点文章、KafkaStream

一、今日内容 1. 定时计算与实时计算 2. 今日内容 KafkaStream 什么是流式计算KafkaStream概述KafkaStream入门案例SpringBoot集成KafkaStream 实时计算 用户行为发送消息KafkaStream聚合处理消息更新文章行为数量替换热点文章数据 二、实时流式计算 1. 概念 一般流式计…...

pnpm 设置国内源

pnpm config set registry https://registry.npmmirror.com/...

链表分割 C语言

链表分割_牛客题霸_牛客网 (nowcoder.com) ( 点击前面链接即可查看题目) /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {} };*/ #include <cstddef> class Partition { public:ListNode* partition(ListNode* pHea…...

python编程,设计一个详细的软件 与SADS 相似

软件功能模块&#xff1a; 用户界面模块&#xff08;UI Module&#xff09; 项目管理界面模型构建界面分析和设计界面结果展示和报告生成界面 数据库模块&#xff08;Database Module&#xff09; 材料数据库结构组件数据库设计标准和规范数据库用户项目数据存储 模型构建模块&…...

META 备受期待的 Llama 3 405B 即将发布

本心、输入输出、结果 文章目录 META 备受期待的 Llama 3 405B 即将发布前言Llama 3 405B或许会彻底改变专用模型的数据质量Llama 3 405B将形成新的模型生态系统:从基础模型到专家组合Llama 3 405B有最高效 API 的竞争Llama 3 405B 基准测试META 备受期待的 Llama 3 405B 即将…...

c# Math.Round()四舍五入取整数

可以使用Math.Round()方法进行四舍五入取整数的操作。 以下是使用Math.Round()方法的实现方法&#xff1a; 将浮点数直接作为参数传递给Math.Round()方法&#xff0c;并指定要保留的小数位数。此方法将返回最接近的整数值。 double number 3.89; int roundedNumber (int)Mat…...

【C++BFS算法】886. 可能的二分法

本文涉及的点 CBFS算法 LeetCod886. 可能的二分法 给定一组 n 人&#xff08;编号为 1, 2, …, n&#xff09;&#xff0c; 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人&#xff0c;那么他们不应该属于同一组。 给定整数 n 和数组 dislikes &#xff0c;其…...

【MySQL】记录MySQL加载数据(LOAD DATA)

MySQL LOAD DATA 一、背景二、模拟生成用户信息三、加载到mysql表3.1、建表语句3.2 加载数据3.3、查看结果 一、背景 现在有个需求是将用户信息存入student.data文件中&#xff0c;在现在load到数据库中 二、模拟生成用户信息 假设用户信息&#xff0c;包含姓名&#xff0c;…...

6 网络

6 网络 1、概念2 IP地址3、套接字4、TCP协议4.1 TCP协议的基本特征4.2 建立连接4.4 终止连接4.5 编程模型 5、UDP协议5.1 UDP协议的基本特性5.2 常用函数5.3 UDP通信模型 6、域名解析 1、概念 计算机网络是实现资源共享和信息传递的计算机系统 ISO/OSI网络协议模型 TCP/IP协…...

SQL中CASE WHEN的用法

CASE WHEN的用法 1. CASE WHEN数据转换 说明&#xff1a;使用CASE WHEN我们可以将范围的数据转换成特定的值来表达; 假如&#xff1a;有一个员工表Employee(employee_id,department_id.salary,name,age)&#xff1b; 需求&#xff1a;需要根据薪资情况来评定等级&#xff1a;…...

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…...

python+vue3+onlyoffice在线文档系统实战20240725笔记,首页开发

解决遗留问题 内容区域的高度没有生效&#xff0c;会随着菜单的高度自动变化。 解决方案&#xff1a;给侧边加上一个最小高度。 首页设计 另一种设计&#xff1a; 进来以后&#xff0c;是所有的文件夹和最近的文件。 有一张表格&#xff0c;类似于Windows目录详情&…...

映美精彩色相机IFrameQueueBuffer转halcon的HObject

1.之前写了黑白IFrameQueueBuffer转halcon的HObject&#xff0c;下载这边文件写&#xff0c;彩色IFrameQueueBuffer转halcon的HObject 2.相机的部署跟黑白的一样&#xff0c;不同的是取图的格式改变 if (CamerTakeImageOne._camer_take_image_static._camer_is_exit){textbox_m…...

写代码对人的影响

1 代码是需要跑起来的&#xff0c;不能你写了一段代码运行不了 2 代码过程中有大量的bug&#xff0c;经常异常报错&#xff0c;你需要花费时间去解决 对人的影响就是解决问题的态度得到强化&#xff0c;解决问题要比坚持正确困难&#xff0c;坚持正确只是需要自然而然的努力&…...

Hive-基础介绍

简介 Apache Hive是一款数据仓库系统 功能 可以将存储在Hadoop(HDFS)中的数据映射为一张数据库表。核心是将HQL语句转化为MapRece程序&#xff0c;然后提交到Hadoop执行。 组件 用户接口&#xff1a;CLI(shell命令行)、WebGUI、Thrift Server元数据存储(Metastore)&#x…...

因果模型评估完全手册:Python指标与验证方法详解

因果模型评估完全手册&#xff1a;Python指标与验证方法详解 【免费下载链接】python-causality-handbook 项目地址: https://gitcode.com/gh_mirrors/py/python-causality-handbook 在数据分析和决策科学领域&#xff0c;因果推断模型的评估是确保模型可靠性与实用性的…...

OpenClaw自动化测试实践:GLM-4.7-Flash驱动脚本执行与结果分析

OpenClaw自动化测试实践&#xff1a;GLM-4.7-Flash驱动脚本执行与结果分析 1. 为什么选择OpenClaw做测试自动化&#xff1f; 上个月接手一个新项目时&#xff0c;我遇到了一个典型的技术矛盾&#xff1a;作为独立开发者&#xff0c;既需要保证代码质量&#xff0c;又没精力手…...

7个赛车数据分析实用技巧:Python F1赛事数据处理实战指南

7个赛车数据分析实用技巧&#xff1a;Python F1赛事数据处理实战指南 【免费下载链接】Fast-F1 FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry 项目地址: https://gitcode.com/GitHub_Trending/fa/Fast-…...

BGE Reranker-v2-m3开发者案例:为LangChain添加本地重排序节点的5步集成法

BGE Reranker-v2-m3开发者案例&#xff1a;为LangChain添加本地重排序节点的5步集成法 1. 项目背景与核心价值 在构建检索增强生成&#xff08;RAG&#xff09;系统时&#xff0c;文本相关性排序是决定最终效果的关键环节。传统的基于向量相似度的检索往往无法准确捕捉查询与…...

毕业季求生指南:用百考通AI重塑你的论文写作全流程

深夜的电脑屏幕前&#xff0c;面对空白的文档和堆积如山的文献&#xff0c;你是否感到无从下手&#xff1f;当查重率居高不下、导师的修改意见密密麻麻时&#xff0c;是否渴望一种更智能的解决方案&#xff1f;本文将为你揭示一个学术写作的新可能。 01 开题之困&#xff1a;从…...

抖音直播数据抓取实战:零基础掌握直播间弹幕分析技术

抖音直播数据抓取实战&#xff1a;零基础掌握直播间弹幕分析技术 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取&#xff08;2024最新版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 想要获取抖音直播间的…...

避开这些坑!MoveIt C++编程中setGoalTolerance、computeCartesianPath等关键函数使用详解与调试技巧

MoveIt C编程避坑指南&#xff1a;关键函数深度解析与实战调试技巧 在机器人运动规划领域&#xff0c;MoveIt作为ROS生态中的核心组件&#xff0c;为开发者提供了强大的功能接口。然而在实际C编程中&#xff0c;许多开发者往往陷入看似简单却暗藏玄机的函数调用陷阱。本文将聚焦…...

深度图还能这样用?Metashape导出数据在Unity3D/B3DM格式转换中的妙用

深度图跨界应用&#xff1a;从Metashape到Unity3D的B3DM格式转换实战指南 当摄影测量遇上游戏开发&#xff0c;深度图的价值远不止于三维重建。在Metashape中生成的深度图数据&#xff0c;经过巧妙转换后能在Unity3D中实现令人惊艳的效果。本文将带你探索这条从专业建模软件到…...

3大突破!115proxy-for-Kodi实现云视频原码播放全攻略

3大突破&#xff01;115proxy-for-Kodi实现云视频原码播放全攻略 【免费下载链接】115proxy-for-kodi 115原码播放服务Kodi插件 项目地址: https://gitcode.com/gh_mirrors/11/115proxy-for-kodi 副标题&#xff1a;突破存储限制&#xff0c;零缓冲流畅播放云端高清视频…...

Simula:革命性Linux VR桌面窗口管理器完全指南

Simula&#xff1a;革命性Linux VR桌面窗口管理器完全指南 【免费下载链接】Simula Linux VR Desktop 项目地址: https://gitcode.com/gh_mirrors/si/Simula Simula是一款专为Linux系统打造的革命性VR桌面窗口管理器&#xff0c;它将传统的桌面操作体验带入虚拟现实空间…...