AutoItX与桌面自动化

在开始讨论AutoItX之前,先简要了解一下AutoIt。AutoIt是一个用于桌面自动化的脚本工具。它的官方页面和维基百科提供了详细的信息,这里就不赘述了。值得一提的是,在作为游戏测试员工作时,有一位非常聪明的同事使用AutoIt自动化了部署系统,这展示了在工作场所通过适当的自动化可以实现的惊人效果。如果需要AutoIt的帮助,他们有一个不错的论坛来解决问题,当然还有StackOverflow社区。

现在已经对AutoIt有了基本的了解,接下来来谈谈AutoItX。AutoItX是一个C#包装库,它覆盖了AutoIt引擎,并作为一个nuget包提供,包含了.Net程序集和原生AutoIt dll。截至本文撰写之时,最新版本是3.3.14.5,发布于2019年1月24日,下载量达到了396,649次,这从角度来看,意味着它在稳定性方面已经经过了实战的考验。

需要注意的是,尽管AutoItX是一个包装库,但它并没有提供AutoIt的所有功能,比如设置热键等。但这是未来可能会考虑的事情。如果想使用C#中不可用的功能,但又想使用C#,一个想法是使用AutoIt编写脚本,编译它,然后从C#中启动它;当然,这样做的缺点是调试的维护成本。

如何安装AutoItX

由于AutoItX是一个nuget包,所以将其添加到项目中是相当简单的,只需搜索并添加即可。但有一个注意事项,因为它使用了原生dll,所以还需要在输出文件夹中包含AutoItX3.dll(用于32位应用程序)或AutoItX3_x64.dll(用于64位应用程序)。

演示:自动化Cookie Clicker

在这个演示中,将使用以下工具:

  • LinqPad 6 - 更喜欢使用LinqPad作为草稿本,在里面原型化功能。还认为(尽管没有确认)它只会与LinqPad 6版本顺利工作,因为这个版本允许在输出中包含文件,而不需要大量的管道代码来获取原生程序集复制到输出文件夹。另外,nuget是LinqPad的付费功能。如果没有付费版本,那么需要手动下载nuget包,解压缩它,然后引用程序集和dlls,或者使用Visual Studio。
  • Cookie Clicker - 这将是玩转自动化的入口。
  • AutoItX nuget包 - 将在LinqPad 6中引用它,以便它能够工作,这在Visual Studio中应该不会有问题,因为包包含了一个.targets文件用于构建,尽管承认,还没有在Visual Studio中使用过它,但如果出现问题,那么与LinqPad相同的方法将会起作用。

打开LinqPad 6,搜索nuget包AutoItX for .NET。下载nuget包并添加它的命名空间后,点击Query Properties窗口中的Add / Browse…按钮(如果默认情况下没有添加包,则默认按键是F4)。导航到nuget包下载的位置,默认情况下是“%HOMEPATH%.nuget\packages\autoitx.dotnet\3.3.14.5”,从构建文件夹中选择要使用的原生dll,将使用AutoItX3_x64.dll。

选择Cookie Clicker的原因是,它是一个简单而有趣的方式,展示了如何从代码中进行连续点击并获得回报(饼干,耶!)。当然,也可以使用其他东西来尝试这个,尽管建议使用可以连续点击一段时间并且也能提供某种反馈的东西(不在空桌面上)。很快就会明白为什么。

现在到了有趣的部分。AutoItX使用一组静态方法来执行操作,例如,以下代码片段将在当前鼠标位置进行鼠标点击(默认左键/主键点击)。

Point startPosition = AutoItX.MouseGetPos(); while (startPosition == AutoItX.MouseGetPos()) { AutoItX.MouseClick(); }

这段代码将循环点击,直到移动鼠标。这样做的原因是,不想给MouseClick方法提供坐标(因为这会阻止移动鼠标),而且点击循环需要停止,这样即使打开任务管理器来结束进程,它也不会继续在那些坐标上点击随机的东西。

为了实现这一点,将使用一个返回当前鼠标坐标的命令,该命令如下:

Point startPosition = AutoItX.MouseGetPos();

坐标以System.Drawing.Point格式返回,包含鼠标当前的X和Y坐标。

有趣的家庭作业

现在,为了一些有趣的家庭作业,试着让脚本只在鼠标悬停在大饼干上时运行。一些提示是找到饼干的顶部和底部Y值,然后找到饼干的左边和右边X值,找到中心,然后在while循环中添加一个条件来检查当前鼠标坐标是否在饼干的区域内。

另一个家庭作业的想法是找到饼干,不管浏览器在哪里(假设它没有最大化或在同一个屏幕上),通过寻找AutoItX提供的其他有用方法。

知道这是一个愚蠢的例子,但确实认为这是一个有趣的方式,可以开始玩鼠标自动化,并作为使用AutoItX和C#进行其他自动化研究的良好起点。

希望喜欢它,可能会在下次回来时为脚本添加一些有趣的附加功能,比如添加热键来打开和关闭脚本。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485