[UiBot]编写源代码

79人参与 |分类: 产品百科|时间: 2019年09月24日

6 编写源代码

前文介绍了,UiBot的流程块可以用可视化视图编写,也可以用源代码视图编写。两者各有优缺点。

在前面几章,我们大多数都是采用可视化视图来举例的。在这一章,将讲述如何用源代码的方式,来实现前面已经实现过的功能。

UIbot完全可以只用可视化视图来编写流程块,也就是说,这一章的内容可以跳过不看。 但是,一旦掌握源代码视图,编写的效率会大大提升,建议有一定基础的读者酌情进行学习。

6.1 基本规则

Uibot Creator打开一个流程块,默认出现的是可视化视图。可视化视图上面有一个左右拨动的开关,把它拨到“源代码”那一边,即可开启源代码视图。

开启源代码视图后,最直观的感受是:1) 不再使用那些整整齐齐排列的方框来显示命令了; 2)右边的属性/变量栏消失了。当然,我们在前文中提到,UiBot的可视化视图和源代码视图是完全等价的,两者可以随时互相转换。那么,这些命令、属性和变量,在源代码视图中是如何表现的呢?

UiBot的源代码视图遵循以下规则:

  • 用一个源代码文件来表示一个流程块,源代码文件的扩展名默认是.task

  • 用函数调用来表示一条命令

  • 用函数调用时传入的参数,来表示命令的属性

  • Dim语句来定义变量

如下图中的例子。在可视化视图中,我们可以通过简单的拖放,插入一条“启动IE浏览器”的命令,并设置其属性。而如果用源代码视图来写的话,大致是箭头所指向的内容。

从图中不难看出,“启动IE浏览器”的命令在源代码视图中实际上是对函数WebBrowser.Create的调用;启动IE浏览器时设置的各项属性,都是函数调用中的变量,如"about:blank"等;命令中使用到的变量,需要用Dim语言定义。

可视化视图和对应的源代码视图
可视化视图和对应的源代码视图

UiBot支持的命令非常丰富,在源代码视图中,这些命令都使用函数来表示。所以,UiBot实际上在UB语言的基础上,内置了一个很大的函数库。其中,最常用的一部分函数是没有命名空间的,如Delay函数;其他函数都是包含一个命名空间的,如前面例子中的WebBrowser.Create函数,其命名空间是WebBrowser。对于有命名空间的函数,大部分都是通过UB语言中的多模块机制,利用一个模块中实现的,所以在使用前需要先用Import语言导入相应的模块,例如WebBrowser.Create函数,在使用前需要写Import WebBrowser。当然,还有几个基础功能,其命名空间是会自动Import的,就不需要我们再做一次Import了,包括MathLogJson等。

UiBot支持的全部命令,其文档可以参考这里。在本文中,我们仅列出目前版本中已支持的主要命名空间及其功能概述,供读者参考。如对其中某个命名空间的功能有兴趣,再查阅文档不迟。注意,如前文所述,UB语言中的各种名字、关键字都不区分大小写,所以下表中列出的各个命名空间,都可以按全大写、全小写或各种大小写混合的方案进行书写。

命名空间功能概述
Mouse鼠标模拟相关功能
Keyboard键盘模拟相关功能
UiElement对界面元素的各种操作
Text对界面元素上的文本的各种操作
Image无目标命令中,通过图像进行各种操作
OCR无目标命令中,通过识别图像内容得到其中文本
WebBrowser对浏览器的各种操作
Window对Windows操作系统中窗口的各种操作
Excel对Excel的各种操作
Word对Word的各种操作
File普通文件的读写等相关功能
INIINI格式文件的读写等相关功能
JsonJson格式字符串和UB中的字典类型的相互转换
Sys和操作系统相关的各种操作
HTTP访问HTTP服务的相关功能
Log在流程运行中记录日志的相关功能
Regex正则表达式的匹配和查找等相关功能
Math数学运算相关功能
Time和时间相关的功能
App对应用程序的各种操作
CSVCSV格式文件的读写等相关功能
MAIl对电子邮件的各种操作
Clipboard对剪贴板的各种操作
Dialog弹出各类对话框,可以和最终用户进行简单交互
Set集合相关功能

比如,我们对Mouse下面的功能感兴趣,一种方法是查阅文档,看看这个命名空间下面有哪些函数,每个函数有哪些参数。另外,如果您的手已经放在键盘上了,还有另一种更快捷的方法,如下所述:

  1. 在UiBot Creator的源代码视图中,随便找一个空行,然后键入Mouse(其实都不需要完整输入,只需要输入首字母m,即可自动联想到相关的关键词,按上下箭头选择,并按回车确认即可)

  2. 键入一个.符号,此时,会自动列出Mouse命名空间下的所有函数

  3. 继续按上下箭头选择,每个选中的函数,都会出现其功能的简要说明,按回车确认要用的函数

  4. 再键入一个左括号(,此时,会自动列出这个函数的参数,并显示第一个参数的说明

  5. 此后,每输入一个参数,按逗号进行参数分隔后,会自动切换到后续参数的说明

上述过程大致如下图所示:

快速查看函数列表和说明
快速查看函数列表和说明

6.2 有目标命令

我们在前文中已经学习了,如何使用可视化视图,插入一条“鼠标”分类下的“点击目标”操作,并选择Windows的开始菜单按钮作为目标。

在可视化视图中插入这条命令后,不妨切换到源代码视图,看看这条命令在源代码视图中是如何展现的(为了方便看清,这里把语句折行了,但不影响效果):

“点击目标”操作的源代码视图
“点击目标”操作的源代码视图

看上去好复杂!但是,不要怕,我们来简化一下:

第一行,以 # 符号开头,可以简单的认为是一种特殊的注释,对流程的运行没有影响,可以省掉。其实,在UiBot Creator中用浅灰色显示,也是建议您不要纠结于此。

第一行之后的内容其实是一个函数调用,调用的函数是Mouse.Action,这个函数包含5个参数。但实际上,只有第一个参数是必须的,后面的参数都可以省略。我们不妨把可以省略的内容都去掉,只剩下下图所示的内容:

“点击目标”操作的源代码视图(简化后)
“点击目标”操作的源代码视图(简化后)

不难看出,函数只剩下了一个参数,这个参数是一个字典类型,代表了要点击的目标。当然,即便是这样简化,这个字典类型里面的内容也是很难手写出来的。怎么办呢?请注意,在源代码视图的上方,有“元素”、“图像”、“窗口”、“区域”四个按钮,分别还有对应的热键Alt+1、Alt+2、Alt+3、Alt+4(如下图)。由于我们需要用一个界面元素来作为命令的目标,所以,这里点击“元素”按钮。

源代码视图上方的快捷按钮
源代码视图上方的快捷按钮

点击后,UiBot Creator的界面暂时消失,出现了“目标选择器”,也就是红边蓝底的半透明遮罩。这个“目标选择器”的用法,和可视化视图中选取目标的方法一模一样,只需要把鼠标移动到目标上,待遮罩恰好遮住目标的时候,单击鼠标左键即可。如果您对“目标选择器”的操作还不熟悉,请回头复习前文中目标选取这部分内容。

目标编辑器的界面
目标编辑器的界面

选择目标之后,会弹出UiBot Creator的“目标编辑器”对话框,如下图所示。我们在前文中已经学习过如何使用目标编辑器来修改目标的特征,以避免造成目标的“错选”或“漏选”。这里的使用方法仍然与前文一致,仅有一点点细微的差别:右下角的按钮变成了“复制到剪贴板”。按下这个按钮,UiBot Creator会把目标的各个特征重新组合成一个字典类型的值,并把这个值以文本的形式复制到操作系统的剪贴板中。之后,只需要回到源代码视图,把剪贴板里的这段文本粘贴到函数调用Mouse.Action中作为参数,即可完成这条命令的编写。

不妨把这段文本粘贴到记事本里,可以看到,其内容就是描述目标的字典类型的值:

{"wnd":[{"app":"explorer","cls":"Shell_TrayWnd"},{"cls":"Start","title":"开始"}]}

在UiBot中书写一条Mouse.Action()函数调用,并把上述内容粘贴到圆括号里面,即可完成这条命令:

Mouse.Action({"wnd":[{"app":"explorer","cls":"Shell_TrayWnd"},{"cls":"Start","title":"开始"}]})

举一反三,我们试试做一点儿更多的操作。比如,把这个开始菜单按钮的图像,保存到一个图像文件里面去。用UiElement.ScreenShot函数可以完成这个任务。这个函数有两个必选的参数,第一个参数仍然是指定界面元素作为目标,第二个参数是要保存的图像文件的路径。也就是说,第一个参数和前面Mouse.Action的参数是完全一样的,把刚才复制到剪贴板的内容直接粘贴到这里就行;第二个参数写一个文件路径即可,比如"C:\\temp\\1.png"。这里有两个值得注意的细节问题:

  • 由于需要写文件,所以请注意,需要写到有权限的路径下。比如,UiBot默认不是以管理员账号启动的,所以诸如"C:\\"这样的路径就是不具有写权限的,但"C:\\temp"具有写权限。

  • 我们使用了字符串来表示文件路径,按照前文中UiBot的规定,字符串中要用转义字符\\来表示一个反斜杠\,所以路径需要写为"C:\\temp\\1.png"的格式。

保存并运行,即可看到开始菜单按钮的图像被存为一个文件。

回过头看看这段源代码,不难发现,“开始菜单按钮”这个目标被重复使用了两次,不好看。我们稍微改造一下,成为下面的样子:

Dim StartButton = {"wnd":[{"app":"explorer","cls":"Shell_TrayWnd"},{"cls":"Start","title":"开始"}]}
Mouse.Action(StartButton)
UiElement.ScreenShot(StartButton, "C:\\temp\\1.png")

这样看起来就清晰多了。


来源:[jane小姐](微信/QQ号:1055692322),转载请保留出处和链接!

地址: