C#制作挂机程序V2.0—刷鼠标单击类在线视频

文章目录

  • 往期内容回顾
  • 一、程序界面
  • 二、功能说明
    • 1.程序已经集成了Microsoft Spy++的功能
    • 2.通过拖动工具自动获取窗体的Title
    • 3.拖动工具自动获取鼠标准备单击点的坐标
    • 4.通过时间设置单击事件后等待时间(刷视频必备)
    • 5.浏览器应用程序不再局限于FireFox
    • 6.适应性增加,只要是通过鼠标单击完成的操作都可以交给它。
    • 7.对窗体程序的自动化单击也适用
  • 三、程序使用步骤
    • 1.程序运行后单击【获取浏览器标题:】,将出现工具如下:
    • 2.拖动放大镜工具到对应的程序窗体,将自动获取到窗体标题
    • 3.单击【获取坐标】按钮,将出现工具如下:
    • 4.拖动放大镜工具到需要自动单击的第一个点,松开,将弹出如下窗口:
    • 5.循环3和4的操作,可以得到一系列的坐标点和相应停顿时间
    • 6.全部设置完成后,直接单击【Start】按钮启动自动化操作。
    • 7.注意,这个自动化操作将周而复始的进行,可以直接关闭这个程序来关闭这个自动化操作。也可以单击【保存坐标】会把坐标点和时间保存到文件中,重新启动时会自动加载已经存在的坐标点和时间。
  • 三、程序关键代码
    • 1.API引用及成员变量
    • 2.移动鼠标代码
    • 3.Start事件代码
    • 4.定时器事件代码
    • 5.启动浏览器事件代码
  • 总结


往期内容回顾

前面已经写过两篇相关的博客了:
1.C#制作网站挂机程序:
(https://blog.csdn.net/stwzx/article/details/121042382)
2.Python构建自动在线刷视频—一个只能做不能说的项目:
(https://blog.csdn.net/stwzx/article/details/121519322)
3.【C#制作挂机程序V2.0—刷鼠标单击类在线视频程序】下载地址:
(https://download.csdn.net/download/stwzx/74089052)
第一篇文章主要在教大家怎样用C#来做一个挂机程序,代码也相对简朴,主要是完成了一个简单的功能,可以处理网页中的弹出的alert对话框。第二篇文章采用Python语言,完全控制浏览器,并能抓取网页中的Tag、id、name或者CSS等标记并进行键盘、鼠标输入,应该是比较完美的程序。但今天为什么又再次回到C#开发的老路上走自动化键盘、鼠标单击事件的挂机程序呢?Python不香吗?代码君不禁呵呵了,Python的坑不可谓不多啊,反爬技术直接让Python驱动浏览器bye bye了。

还是直接上干货吧

一、程序界面

在这里插入图片描述
程序还挺简洁的,不过不要小看它,功能可不小!

二、功能说明

1.程序已经集成了Microsoft Spy++的功能

2.通过拖动工具自动获取窗体的Title

3.拖动工具自动获取鼠标准备单击点的坐标

4.通过时间设置单击事件后等待时间(刷视频必备)

5.浏览器应用程序不再局限于FireFox

6.适应性增加,只要是通过鼠标单击完成的操作都可以交给它。

7.对窗体程序的自动化单击也适用

强调一下,拖动工具得到坐标和窗体标题的做法,在C#开发中的实现,有可能仅此一家哦。因为本码农搜遍百度都没找到,有此功能的都是C++开发的。所以这个创意在C#应用完全是本人独有。

三、程序使用步骤

核心使用功能展示:

1.程序运行后单击【获取浏览器标题:】,将出现工具如下:

在这里插入图片描述

2.拖动放大镜工具到对应的程序窗体,将自动获取到窗体标题

这个功能主要目的还是为了获取到应用程序的句柄,有了句柄可以把窗体设置为最上层显示。(不被其它窗体遮盖)

3.单击【获取坐标】按钮,将出现工具如下:

在这里插入图片描述

4.拖动放大镜工具到需要自动单击的第一个点,松开,将弹出如下窗口:

在这里插入图片描述
坐标不用设置,就是刚才鼠标松开的位置,停顿时间是单击后停多少时间,进行下一个操作的时间。

5.循环3和4的操作,可以得到一系列的坐标点和相应停顿时间

6.全部设置完成后,直接单击【Start】按钮启动自动化操作。

7.注意,这个自动化操作将周而复始的进行,可以直接关闭这个程序来关闭这个自动化操作。也可以单击【保存坐标】会把坐标点和时间保存到文件中,重新启动时会自动加载已经存在的坐标点和时间。

三、程序关键代码

1.API引用及成员变量

 #region API及成员变量/// <summary>/// 根据坐标获取窗口句柄/// </summary>/// <param name="point">坐标</param>/// <returns></returns>[DllImport("user32.dll")]private static extern IntPtr WindowFromPoint(Point point);public delegate bool EnumChildWindow(IntPtr WindowHandle, string num);/// <summary>/// 传递消息给记事本/// </summary>/// <param name="hWnd"></param>/// <param name="Msg"></param>/// <param name="wParam"></param>/// <param name="lParam"></param>/// <returns></returns>[DllImport("User32.DLL")]public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, string lParam);[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);[DllImport("user32.dll")]public static extern bool SetForegroundWindow(int hWnd);[DllImport("User32.dll")]public static extern int EnumChildWindows(IntPtr WinHandle, EnumChildWindow ecw, string name);[DllImport("User32.dll")]public static extern int GetWindowText(IntPtr WinHandle, StringBuilder Title, int size);[DllImport("user32.dll")]public static extern int GetClassName(IntPtr WinHandle, StringBuilder Type, int size);[DllImport("user32")]private static extern int GetWindowThreadProcessId(IntPtr handle, out int pid);[DllImport("user32")]public static extern IntPtr SetActiveWindow(IntPtr hWnd);[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);[DllImport("user32.dll", EntryPoint = "FindWindow")]private static extern IntPtr FindWindow(string IpClassName, string IpWindowName);//查找窗体控件public int iSecond = 30;public delegate bool CallBack(int hwnd, int lParam);public RECT rectMain = new RECT();private string typeName;private IntPtr mainHwnd;public IntPtr ip;private string BSType = "Chrome_WidgetWin_1";bool Flag = false;int X;int Y;int times;private IntPtr mainWindowHandle;[StructLayout(LayoutKind.Sequential)]public struct RECT{public int X; //最左坐标public int Y; //最上坐标public int Height; //最右坐标public int Width; //最下坐标}/// <summary>/// 查找句柄/// </summary>/// <param name="hwndParent"></param>/// <param name="hwndChildAfter"></param>/// <param name="lpszClass"></param>/// <param name="lpszWindow"></param>/// <returns></returns>[DllImport("User32.DLL")]public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);[DllImport("User32")]public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);[DllImport("user32.dll")]static extern bool SetCursorPos(int X, int Y);public const uint WM_SETTEXT = 0x000C;public System.Diagnostics.Process Proc;public System.Windows.Forms.Timer myTimer;public List<Opt> optList = new List<Opt>();public Queue<Opt> optQueue = new Queue<Opt>();#endregion

2.移动鼠标代码

public void MoveTo(int x1, int y1, int x2, int y2)
{float k = (float)(y2 - y1) / (float)(x2 - x1);float b = y2 - k * x2;for (int x = x2; x != x1; x = x + Math.Sign(x1 - x2)){//MoveTo(x1,y1,x,(k*x+b));SetCursorPos(x, (int)(k * x + b));Thread.Sleep(3);}
}

代码如下(示例):

3.Start事件代码

private void btnStart_Click(object sender, EventArgs e)
{foreach (string strLine in richTextBox1.Lines){string[] strInt = strLine.Split(new string[] { "," }, StringSplitOptions.None);if (strInt.Length <= 2)//小于2个参数:一个Point由X,Y组成{continue;}int x = int.Parse(strInt[0]);int y = int.Parse(strInt[1]);int times = int.Parse(strInt[2]);optList.Add(new Opt(x, y, times));}foreach (Opt opt in optList){optQueue.Enqueue(opt);}IntPtr hnd = FindWindow(null, txtTitle.Text);IntPtr ip = hnd;lblMessage.Text = ip.ToString();iSecond = 1;//myTimer.Interval = 1000 * iSecond;myTimer.Interval = 1000 * 60 * iSecond;myTimer.Enabled = false;FindWindowClass.TopMostWindow.SetTopomost(ip);SetForegroundWindow((int)ip);if (optQueue.Count > 0){Opt opt = optQueue.Dequeue();X = opt.x;Y = opt.y;times = opt.Times;System.Timers.Timer t = new System.Timers.Timer();//实例化 t.Elapsed += new System.Timers.ElapsedEventHandler(CallBack2);t.AutoReset = false;t.Interval = 1000 * times;t.Enabled = true;}
}

4.定时器事件代码

private void CallBack2(object sender, EventArgs e)
{MoveTo(X, Y, MousePosition.X, MousePosition.Y);mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), X, Y, 0, IntPtr.Zero);//Thread.Sleep(200);mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), X, Y, 0, IntPtr.Zero);if (optQueue.Count > 0){Opt opt = optQueue.Dequeue();X = opt.x;Y = opt.y;times = opt.Times;System.Timers.Timer t = new System.Timers.Timer();//实例化 t.Elapsed += new System.Timers.ElapsedEventHandler(CallBack2);t.AutoReset = false;t.Interval = 1000 * times;t.Enabled = true;}else{foreach (Opt opt1 in optList){optQueue.Enqueue(opt1);}Opt opt = optQueue.Dequeue();X = opt.x;Y = opt.y;times = opt.Times;System.Timers.Timer t = new System.Timers.Timer();//实例化 t.Elapsed += new System.Timers.ElapsedEventHandler(CallBack2);t.AutoReset = false;t.Interval = 1000 * times;t.Enabled = true;}
}

5.启动浏览器事件代码

private void btnStartBrowser_Click(object sender, EventArgs e)
{if (string.IsNullOrEmpty(txtFile.Text)) return;try{// 浏览器程序启动线程Proc = new System.Diagnostics.Process();Proc.StartInfo.FileName = txtFile.Text;Proc.StartInfo.Arguments = txtNetAddr.Text;  //浏览器打开URL参数Proc.StartInfo.UseShellExecute = false;Proc.StartInfo.RedirectStandardInput = true;Proc.StartInfo.RedirectStandardOutput = true;Proc.Start();}catch{Proc = null;}
}

总结

挂机程序的开发本身是存在着局限性的。往往只能针对某一个或某一类应用程序。但只要你注重思考和挖掘,不管什么样的应用程序,总能找到对应的点开发出相应的挂机程序。要想用一个挂机程序一招吃遍天下是不可行的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1621169.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

菜鸡的秋招升级打怪之旅

记录秋招。。。 旷视一面&#xff08;2022.08.12&#xff09; softmax&#xff0c;交叉熵loss实现 import numpy as np import torch import torch.nn.functional as Fdef softmax(logits):logits_exp torch.exp(logits)logits_softmax logits_exp / torch.sum(logits_exp, …

7000字爆肝!我把14个自学编程的压箱底网站全部分享给你们啦

前一段时间&#xff0c;一个初学编程的小伙子跟我说&#xff0c;他一般在某站上找视频自学&#xff0c;但是学了2个多月&#xff0c;刚开始学的知识已经忘得差不多了&#xff0c;现在再继续学下去又听不懂&#xff0c;该怎么办&#xff1f; 经过一夜深思&#xff0c;终于想出了…

给你5分钟白漂:这些都是我的常用在线工具和网站

小伙伴们大家好&#xff0c;本期再托一次家底&#xff0c;和大家分享十几个自己日常工作学习过程中的常用在线工具和网站&#xff0c;希望能有帮助。 也欢迎小伙伴们分享和安利出你们觉得有用的工具&#xff0c;不要停啊。 注&#xff1a;本文 Github开源项目&#xff1a;gith…

吃透OLED显示原理——玩转OLED模块各种使用方法

oled模块有4种工作模式&#xff0c;分别是6800、8080两种并行接口方式、 4线的穿行SPI接口方式、IIC接口方式。通过模块的BS1/BS2设置&#xff08;通过硬件来设置&#xff09;&#xff0c;BS1/BS2的设置与模块接口模式的关系如表所示&#xff1a; 这是其中一种工作方式的模块&…

推荐52个堪称神器的学习网站,每天坚持一小时,让你受益一生【上】

本篇文章分为上下篇&#xff0c;给大家整理了一些终身受益&#xff0c;堪称神器的学习网站&#xff0c;什么行业的学习网站都有&#xff0c;推荐给大家&#xff0c;里面都是满满的干货&#xff0c;我就不过多介绍了&#xff0c;大家自行探索。 社区类 1、GitHub 我就不吭气&…

C++贪吃蛇(控制台版)

C自学精简实践教程 目录(必读) 目录 主要考察 需求 输入文件 运行效果 实现思路 枚举类型 enum class 启动代码 输入文件data.txt 的内容 参考答案 学生实现的效果 主要考察 模块划分 文本文件读取 UI与业务分离 控制台交互 数据抽象 需求 用户输入字母表示方…

炒股的策略方法

炒股的策略方法 炒股常见问题 你炒股的时候有没有遇到这样的问题&#xff1f; &#xff08;1&#xff09;需要时刻盯着大盘和个股的走势&#xff0c;一分心&#xff0c;一走神&#xff0c;就错过了机会&#xff1f;工作时没有时间和精力去看大盘走势和个股的走势&#xff0c;…

国内四大炒股软件APP 全面技术解析

随着人们的焦点逐步由电脑PC端转为手机端之后&#xff0c;国内炒股软件也逐步开始推出手机炒股APP&#xff0c;但是面对如此众多的都以“最牛、最佳”等冠名的APP真的实至名归吗&#xff1f;为了大家不再走弯路&#xff0c;不沉迷智能选股&#xff0c;笔者将近期比较火的几款炒…

炒股知识讲解

炒股知识目录 笔者致读者朋友的话一、炒股基础知识1.什么是股票?2.股票的分类a.第一类b.第二类c.第三类 3.股票市场a.一级市场b.二级市场c.三级市场d.四级市场e.场外交易市场f.二板市场 4.各股票市场的开盘时间中国A股市场开盘时间&#xff1a;中国香港股市开盘时间&#xff1…

鸿蒙策略炒股软件安全么,鸿蒙即将全量开源 引爆国产软件板块!

华为正在全方位加速构建鸿蒙生态。在5月18日举行的HarmonyOS Connect伙伴峰会上&#xff0c;华为正式宣布升级智慧全场景生态战略&#xff0c;对鸿蒙硬件生态伙伴进行“产品渠道运营”全方位赋能。 在上述峰会上&#xff0c;华为消费者业务AI与智慧全场景业务部副总裁杨海松给鸿…

同花顺手机显示切换服务器,手机炒股超人时代到来 手机Level-2功能点评

您可能感兴趣的话题&#xff1a; 同花顺手机炒股3G版 核心提示&#xff1a;手机炒股也能看上证深证level-2数据啦&#xff01;深受股民喜爱的同花顺 (300033) 手机炒股正式推出了手机Level-2版&#xff0c;不但优化并新加了股民用户需求较多的功能&#xff0c;还进一步改善软件…

webassembly009 transformers.js 网页端侧推理

之前试用过两个网页端的神经网络框架&#xff0c;一个是 Tensorflow PlayGround&#xff0c;它相当与实现了一个网页端的简单的训练框架&#xff0c;有关节点的数据结构可看这篇。另一个是onnx的网页端(nodejs绿色免安装try onnx on web(chrome))&#xff0c;需要自己转换onnx模…

2022安全员-A证试题及在线模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022安全员-A证上岗证题库为安全员-A证考试题库新版习题库&#xff01;2022安全员-A证试题及在线模拟考试根据安全员-A证最新教材汇编。安全员-A证考试真题随时根据安全生产模拟考试一点通上提前熟悉考试环境。 1、【…

2022山东省安全员C证复训题库及模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022山东省安全员C证理论题库是山东省安全员C证试卷高频考题覆盖&#xff01;2022山东省安全员C证复训题库及模拟考试依据山东省安全员C证最新教材汇编。山东省安全员C证考试模拟题随时根据安全生产模拟考试一点通上快…

2022安全员-A证考题及在线模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022年安全员-A证上岗证题目系安全员-A证考试模拟题理论知识考试题库&#xff01;2022安全员-A证考题及在线模拟考试依据安全员-A证新版考试题库。安全员-A证复审模拟考试通过安全生产模拟考试一点通上查看全部题库。…

2022年安全员-C证考试练习题及在线模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022年安全员-C证上岗证题目为安全员-C证操作考试题新版教材大纲题库&#xff01;2022年安全员-C证考试练习题及在线模拟考试根据安全员-C证新版教材大纲编写。安全员-C证模拟考试题库随时根据安全生产模拟考试一点通…

2022年安全员-A证考试试题及在线模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022年安全员-A证复训题库系安全员-A证理论题库的多种练习模式&#xff01;2022年安全员-A证考试试题及在线模拟考试根据安全员-A证新版考试题库。安全员-A证操作考试题通过安全生产模拟考试一点通上模拟考试。 1、【…

2022年安全员-C证考试题库及在线模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022安全员-C证复训题库系安全员-C证练习题考前押题&#xff01;2022年安全员-C证考试题库及在线模拟考试根据安全员-C证新版考试题库。安全员-C证考试题目通过安全生产模拟考试一点通智能考场练习。 1、【多选题】《…

2022安全员-A证考试题模拟考试题库及在线模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2022年安全员-A证考题为安全员-A证复训题库考前押题&#xff01;2022安全员-A证考试题模拟考试题库及在线模拟考试根据安全员-A证考试大纲。安全员-A证全部考试题库通过安全生产模拟考试一点通随机组卷。 1、【多选题…