C# 使用NetAutoGUI.Windows做软件自动化操作

.NET兼职社区
搭建开发环境

包名:NetAutoGUI 和 NetAutoGUI.Windows

安装NuGet包:

​ NuGet\Install-Package NetAutoGUI -Version 1.0.9

​ NuGet\Install-Package NetAutoGUI.Windows -Version 1.0.9

如果安装失败则需要设置目标框架为windows
在这里插入图片描述

在本指南中,我们将详细解析如何使用NetAutoGUI库来实现对微信应用的自动化控制,包括查找并激活微信窗口、自动识别并点击屏幕图标、以及定时发送消息等功能。以下是对代码的逐段解析与说明:

引入命名空间

using NetAutoGUI;

NetAutoGUI是核心库,提供了自动化操作桌面应用程序所需的全部功能。

主函数定义

void Main()
{
    ...
}

主函数Main()是程序的入口点,所有的自动化逻辑都在这里展开。

检测并激活微信窗口

Window? wind = GUI.Application.FindWindowByTitle("微信");
if (null == wind)
{
    Rectangle? rectWXIcon = GUI.Screenshot.LocateOnScreen(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images", "wechaticon.png"));
    if (null == rectWXIcon)
    {
        Console.WriteLine("图标未找到!");
        return;
    }
    GUI.Mouse.Click(rectWXIcon.X, rectWXIcon.Y);
    wind = GUI.Application.WaitForWindowByTitle("微信");
    wind?.Activate();
}
else 
{
    wind.Activate();
}

首先尝试通过标题"微信"查找并激活微信窗口。如果窗口不存在,通过LocateOnScreen方法定位屏幕上的微信图标位置,并模拟鼠标点击。之后,等待并激活微信窗口。

定时发送消息

bool active = true;
Task.Run(async () =>
{
    while (active)
    {
        wind?.WaitAndClick(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images", "search.png"));
        GUI.Keyboard.Write("boss");
        await Task.Delay(1000);
        GUI.Keyboard.Press(VirtualKeyCode.RETURN);
        await Task.Delay(1000);
        GUI.Keyboard.Write($"定时发送 北京时间:{DateTime.Now}");
        await Task.Delay(1000);
        GUI.Keyboard.Press(VirtualKeyCode.RETURN);
        await Task.Delay(5000);
    }
});

在异步任务中,循环执行搜索好友并发送带有当前时间的消息。每个操作之间都有延迟,以模仿人类的操作速度,避免被系统或应用识别为自动化行为。

控制自动化流程

Console.WriteLine("请输入:");
string input = Console.ReadLine();
if (input == "1")
{
    active = false;
}
Console.WriteLine("结束");

通过控制台输入,可以控制是否继续执行自动化任务。当输入为"1"时,停止消息发送循环,结束自动化流程。

总结
通过上述步骤,我们不仅实现了对微信窗口的查找、激活,还实现了基于时间间隔的自动化消息发送。NetAutoGUI库的强大之处在于它提供了丰富的API,使得复杂的自动化操作变得简单且高效。无论是个人自动化需求,还是企业级自动化解决方案,NetAutoGUI都是一个值得信赖的选择。

整体代码:


using NetAutoGUI;

Main();
void Main() {
    Console.WriteLine();
    Window? wind = GUI.Application.FindWindowByTitle("微信");
    if (null == wind)
    {
        //如果微信未找到   就找到屏幕中的微信图标 点击   他会自动识别图片在屏幕中的x y 坐标
        Rectangle? rectWXIcon = GUI.Screenshot.LocateOnScreen(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images", "wechaticon.png"));
        if (null == rectWXIcon)
        {
            Console.WriteLine("图标未找到!");
            return;
        }
        GUI.Mouse.Click(rectWXIcon.X, rectWXIcon.Y);
        wind = GUI.Application.WaitForWindowByTitle("微信");
        wind?.Activate();
    }
    else 
    {
        wind.Activate(); //激活窗口
    }

    bool falsge = true;
    Task.Run(async () =>
    {

        while (falsge) {
            wind?.WaitAndClick(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images", "serch.png"));//点击搜索
            GUI.Keyboard.Write("小丫头");//输入文本
            await Task.Delay(1000);
            GUI.Keyboard.Press(VirtualKeyCode.RETURN);//回车
            await  Task.Delay(1000);
            GUI.Keyboard.Write($"定时发送 北京时间:{DateTime.Now}");//输入文本
            await Task.Delay(1000);
            GUI.Keyboard.Press(VirtualKeyCode.RETURN);//回车发送
            await Task.Delay(5000);
        }

    });
    Console.WriteLine("请输入:");
    string s = Console.ReadLine();
    if (s=="1")
    {
        falsge = false;
    }
    Console.WriteLine("结束");
}

参考

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,解析NC程序需要先将NC代码中的指令进行解析、转化成机器可读的指令,这个过程需要使用专门的NC解析器进行处理。接着,使用解析器将解析后的指令转化成对应的图形数据,通常是通过数学计算来实现的。 在C#中,可以使用System.Windows.Media命名空间下的类来实现图形的绘制和呈现。比如,可以使用Path类来绘制路径,使用Geometry类来定义几何形状,使用DrawingContext类来绘制图形。 具体实现步骤如下: 1. 将NC程序解析成机器可读的指令,转换成对应的图形数据。 2. 定义绘图区域,可以使用WPF中的Canvas控件。 3. 创建Path对象,设置其Data属性为解析出的图形数据。 4. 将Path对象添加到Canvas中。 5. 使用DrawingContext类绘制Path对象,可以使用Fill或Stroke方法来填充或描边图形。 示例代码如下: ```C# using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace NCProgramToGraphics { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // 将NC程序解析成机器可读的指令,转换成对应的图形数据 string ncCode = "G01 X10 Y10\nG02 X20 Y20 I10 J0"; Geometry geometry = ParseNCCode(ncCode); // 定义绘图区域 Canvas canvas = new Canvas(); // 创建Path对象,设置其Data属性为解析出的图形数据 Path path = new Path(); path.Data = geometry; // 将Path对象添加到Canvas中 canvas.Children.Add(path); // 使用DrawingContext类绘制Path对象 DrawingContext drawingContext = path.RenderOpen(); drawingContext.DrawGeometry(Brushes.Red, new Pen(Brushes.Black, 1), geometry); drawingContext.Close(); // 将Canvas添加到窗口中 this.Content = canvas; } private Geometry ParseNCCode(string ncCode) { // 解析NC代码,转换成对应的图形数据 // ... // 返回图形数据 return new EllipseGeometry(new Point(15, 15), 5, 5); } } } ``` 这是一个简单的示例代码,具体实现需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值