在没有源程序的情况时,如何通过控制鼠标按钮控制电脑exe程序?
创始人
2024-12-17 17:08:07
0

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

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

 ```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 down         WM_LBUTTONUP = 0x202,   //Left mousebutton up         WM_LBUTTONDBLCLK = 0x203, //Left mousebutton doubleclick         WM_RBUTTONDOWN = 0x204, //Right mousebutton down         WM_RBUTTONUP = 0x205,   //Right mousebutton up         WM_RBUTTONDBLCLK = 0x206, //Right mousebutton do         WM_CUT = 0x300,         WM_COPY = 0x301,         WM_PASTE = 0x302,         WM_CLEAR = 0x303     }       public enum Functions : int     {         KEYEVENTF_KEYDOWN = 0x0000, // New definition         KEYEVENTF_EXTENDEDKEY = 0x0001, //Key down flag         KEYEVENTF_KEYUP = 0x0002, //Key up flag         VK_LCONTROL = 0xA2, //Left Control key code         A = 0x41, //A key code         C = 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);      }  } 

相关内容

热门资讯

一分钟教你!广东雀神外 挂(一... 一分钟教你!广东雀神外 挂(一贯真的是有挂)详细透视辅助教程1.广东雀神外 挂 ai辅助创建新账号,...
微扑克辅助器ios!微扑克网页... 微扑克辅助器ios!微扑克网页版辅助,微扑克真的有挂存在(都是真的是有挂);无聊就玩这款微扑克真的有...
重大来袭!都莱罗松(本来真的是... 重大来袭!都莱罗松(本来真的是有挂)详细透视辅助教程1、打开软件启动之后找到中间准星的标志长按。2、...
微扑克辅助软件!微扑克有挂(透... 微扑克辅助软件!微扑克有挂(透明挂)好像是有挂1、微扑克系统规律教程、微扑克辅助透视等服务,为用户提...
玩家必知教程!金州水鱼辅助工具... 玩家必知教程!金州水鱼辅助工具(一贯是真的有挂)详细辅助教程所有人都在同一条线上,像星星一样排成一排...
最新技巧!!福建众娱软件有没有... 最新技巧!!福建众娱软件有没有辅助(透明挂)透明挂透视辅助脚本(2023已更新)(哔哩哔哩);福建众...
科普分享!心悦填大坑总输怎么回... 科普分享!心悦填大坑总输怎么回事(确实有挂)详细透视辅助教程1、心悦填大坑总输怎么回事系统规律教程、...
分享认知!柳州天天爱麻将有挂吗... 分享认知!柳州天天爱麻将有挂吗(透视)透明挂透视辅助脚本(2023已更新)(哔哩哔哩);1、金币登录...
记者揭秘!衢州都莱十三道辅助器... 记者揭秘!衢州都莱十三道辅助器(切实是有挂)详细辅助教程1、衢州都莱十三道辅助器ai机器人多个强度级...
玩家必知教程!!卡农斗牛辅助最... 玩家必知教程!!卡农斗牛辅助最新版本(透视)透视脚本辅助插件(2021已更新)(哔哩哔哩)运卡农斗牛...