搜索
查看: 1312|回复: 39

【分享中控】通过C#快速实现一个'脚本'

[复制链接]

2

主题

9

帖子

190

积分

注册会员

Rank: 2

积分
190
发表于 2019-9-3 09:20:20 | 显示全部楼层 |阅读模式
本帖最后由 blublu11 于 2019-9-3 13:57 编辑

前言

游客,如果您要查看本帖隐藏内容请回复





快速入门

游客,如果您要查看本帖隐藏内容请回复



2.生成脚本文件

使用VS新建一个类库项目,命名为Demo(后面我会讲解如何把这个名为Demo.dll脚本文件添加进中控软件,以及如何运行它),引用Baymax.dll。然后新建一个类(或直接使用自动创建出的Class.cs),引用命名空间Baymax,然后把该类实现一个IContent接口。该类还需要应用DescriptionAttribute特性,否则中控无法识别。

新建的类如图所示:

游客,如果您要查看本帖隐藏内容请回复


其中方法Main是脚本的入口函数,它的string[]类型的参数代表在中控软件中用户设置的参数串,中控自动把它以"|"分割成的结果(关于参数串后面会继续提到)。

此外Main方法内还自定义了些代码,这里必须说明一下输出语句。这个输出它会把用户设置的参数串输出到一个属于调用Main方法的线程的相对应的中控输出窗口。也就是说,2个以上的脚本线程的输出,不会集中在一个输出窗口,这样开发者不但方便调试BUG,也可以给线程输出一些状态信息,以让用户心中有数。在中控软件的主界面中,鼠标右键点击表格的某一行,在弹出的菜单栏中选择显示输出窗口项,即可显示属于该线程的输出窗口。显然,当把这个写好的类生成一个脚本文件后,放到中控执行,调用这个输出的代码才能输出到相应的中控输出窗口

最后,点击VS上方菜单栏的 生成(B) | 生成解决方案(B) 项即可生成脚本文件(dll类型的托管程序集)。后面我会讲解如何把这个名为Demo.dll脚本文件添加进中控软件,以及如何运行它。


3.在中控添加线程信息

中控默认从软件目录的ContentLib文件夹下获取脚本们的名称显示给用户,最后决定选择哪个脚本文件执行。同理,SimulatorCommandLib文件夹也如此。

线程信息(Controller的Start方法需要的参数)要手动进行添加,如果希望中控能够根据有多少个目标窗口(比如模拟器窗口)而创建多少项线程信息,要重写某个函数。添加过的信息会保存到配置文件。也可以一次性添加多项线程信息,以便后期需要用到时可以直接运行。点运行按钮时会通过这些信息创建Controller对象并调用它的Start方法,该方法内部使用了线程(Thread)对象。注意,线程信息并非现在专有的技术概念,而是我为了让大家好理解,大家只要知道它代表的是什么即可,后面我会多次提到。添加步骤如下:

点击中控的左上角的"+"按钮:

【分享中控】通过C#快速实现一个'脚本'

随后会出现如图所示的"控制者"对话框:

【分享中控】通过C#快速实现一个'脚本'

现在,可以开始添加线程信息了。其中“目标程序命令文件”文本框右边的浏览按钮,可以理解为为线程使用哪个ADB命令文件(.DLL类型的托管程序集),多个线程不必指定相同的文件。可以浏览我事先写好的LeidianSimulator.dll文件,它里面的类LeidianSimulator提供了对雷电模拟器的命令行操作的一系列函数。点击浏览按钮后如下图所示:

游客,如果您要查看本帖隐藏内容请回复


会看到,第一行第一列显示的是“雷电模拟器命令库1.0”,原因是该类库的某个类型应用了特性DescriptionAttribute指定了这个名称。 这一项正是LeidianSimulator.dll。双击选择列表中的这一项,该窗口会随之消失并把选定的内容更新到“目标程序命令文件”文本框。添加线程信息中的“内容文件”也一样,但这个浏览的是脚本文件(.DLL类型的托管程序集)。“标题”输入框设置的字符串会作为某个方法的信息,最终会调用该方法获取句柄。最后需要在“目标程序文件”浏览模拟器的路径,否则,“目标程序命令文件”浏览选定的文件的功能会无法使用。

“参数串”输入框设置的内容,中控会把它以“|”分割成一个string[]类型的引用,然后传送给相对应的“内容文件”的IContent类型的Main方法(也接受一个string[]类型的参数)。

全都设置好以后,如下所示:

【分享中控】通过C#快速实现一个'脚本'

注意,上面的“内容文件”文本框浏览的是上面生成的Demo.dll,它有一个类型通过特性DescriptionAttribute把名称设置为了“演示脚本”。

最后点对话框中的确定按钮,即可把这一项线程信息添加入主界面的表格,如下图所示:

【分享中控】通过C#快速实现一个'脚本'

在这个主界面中,鼠标右键点击表格的第一行,在弹出的菜单栏中选择显示输出窗口项,即可显示属于该线程的输出窗口。如下图所示:

【分享中控】通过C#快速实现一个'脚本'

注意,这个输出窗口和表格中的第一行是“绑定”在一块的。2个以上的脚本线程的输出,不会集中在这一个输出窗口。

然后点击表格中第一行的运行按钮,运行完毕后,如下图所示:

【分享中控】通过C#快速实现一个'脚本'

至此,脚本运行完毕。注意,运行的脚本有一个打开雷电模拟器设置页的功能,这个时候已经是成功打开的了。也可以在主界面中,点击工具栏中的运行全部按钮,等价于点击表格中的运行按钮,因为表格只有一行。当表格有多行的时候,如果点击运行全部按钮,相当于自动"把已勾选的行进行一个一个点它们的运行按钮"。这个脚本的功能很简单,也很快执行完毕,因此不方便演示暂停、继续、终止,大家可以在软件中自己试试,其实非常简单。


题外话,关于中控是如何设置IContent的Hwnd(句柄)属性的

以上面设置的线程信息为例,设置的标题会传递给LeidianSimulator.dll中的ISimulator类型的Name属性。最后调用它的FindWindow()方法返回的句柄会赋给脚本文件的IContent类型的Hwnd属性。此外,ISimulator有一个SimulatorCommandBase(抽象)类型的属性SimulatorCommand,旨提供一组操作ADB命令的方法。如果不需要ADB命令,这些方法都可以实现为空。IContent也有一个属性Command,也是SimulatorCommandBase类型,最终它会引用相应的ISimulator的SimulatorCommand。


一些批量操作

可以在中控的主界面的表格中用鼠标同时选定多行,然后点击上方工具栏的修改按钮,一并修改它们的线程信息。删除多个项也是类似的操作。而上方工具栏的运行全部(一个以上的线程未运行会出现)、暂停全部(一个以上的线程正在运行会出现)、继续全部(一个以上的线程正在暂停会出现)、终止全部(一个以上的线程正在运行/暂停会出现),是对已运行的线程进行批量操作。如某个线程需要终止操作,可以在表格中用鼠标右键选中与之对应的项,在弹出来的菜单中选择终止运行(S)项即可。





Controller对象

游客,如果您要查看本帖隐藏内容请回复







游客,如果您要查看本帖隐藏内容请回复



回复

使用道具 举报

0

主题

7

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2019-9-3 10:27:08 | 显示全部楼层
厉害了厉害了厉害了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2019-9-4 19:58:44 | 显示全部楼层
看看看看看看看看看看看看看看看看看看看看看看看看
回复 支持 反对

使用道具 举报

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2019-9-6 17:52:52 | 显示全部楼层
过后就觉得
回复 支持 反对

使用道具 举报

1

主题

6

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2019-9-9 20:47:12 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2019-9-9 21:25:00 | 显示全部楼层
好的卡卡卡卡
回复 支持 反对

使用道具 举报

0

主题

2

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2019-9-10 20:39:39 | 显示全部楼层
看看高手是如何操作的。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2019-9-11 09:04:38 | 显示全部楼层
看看高手是如何操作的。
回复 支持 反对

使用道具 举报

2

主题

8

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2019-9-11 11:05:51 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

19

帖子

138

积分

注册会员

Rank: 2

积分
138
发表于 2019-9-21 15:25:49 | 显示全部楼层
哈哈口袋只
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关内容

小黑屋|安卓模拟器 ( 沪ICP备16020667号|公安备案号4010602006048号 )

GMT+8, 2019-12-14 13:40 , Processed in 0.095804 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表