AutoIt
https://www.jb51.net/shouce/autoit/AutoIt_CN/html/functions.htm
函数说明
ControlFocus
设置输入焦点到指定窗口的某个控件上。
ControlFocus ( "窗口标题", "窗口文本", 控件ID)
参数
窗口标题 | 目标窗口标题。 |
窗口文本 | 目标窗口文本。 |
控件ID | 目标控件。请查看关于 控件 的说明。 |
返回值
成功: | 返回值为1。 |
失败: | 返回值为0。 |
注意
无
相关
示例
ControlFocus("无标题 - 记事本", "", "Edit1")
控件(Controls)
AutoIt v3 的其中一个最优秀的新功能就是提供了直接操作某些窗口控件的支持。我们在窗口上能看到的东西大多都是以下控件的一种:按钮、列表框、文本编辑框、静态文本等。比如说系统自带的记事本程序的主窗口也不过只是一个相对而言比较大一点的“编辑框(Edit)”控件罢了!正因为 AutoIt 提供了直接对控件操作的途径,我们再也不需要(也不应该)使用模拟键击等低级的方法来操作窗口了,这使得需要实现窗口操作的脚本更加可靠。
注意: AutoIt 仅支持标准的 Microsoft 控件 - 有些应用程序(的作者)自己写的自定义控件看起来很像是标准的 MS 控件,但却无法被脚本程序识别,那就只能靠您的经验判断了,实践出真理!
运行 AutoIt Window Info 之后您可以试着把鼠标移动到自己感兴趣的窗口上,在 Window Info 的窗口就会显示当前鼠标经过的控件的信息。这些信息包括:
- 控件 ID(Control ID)
- 类别名(ClassNameNN)
- 文本(Text)
- 控件句柄 (HWND) (这个不能利用 AutoIt Window Info 获得,获得方法请看下文)
如果你看到某个 Control...() 函数要求提供 控件ID(ControlID)作为参数(实际上大部分控件函数都需要此参数),那么您就可以使用这些信息中的任意一种来作为参数传递到函数中。具体使用哪一种方法其实主要看您的个人喜好以及从 AutoIt Window Info 中能获得的信息类型,一般而言,最好的方法就是使用控件ID(ControlID),但如果控件ID无法获得或者是靠控件ID还不足以保证能识别目标控件(比如说同时有几个控件ID相同的控件存在,这种情况通常发生在静态文本控件上),那么就需要换为另外的三种方法之一了。
控件 ID(Control ID)
控件 ID 是指Windows指定给每个控件的数值型标识符(实际上就是整数值)。通常这是用来识别控件的最好的方法。除了 AutoIt Window Info 之外,还有其他的应用程序比如某些给盲人用的读屏软件或者其它使用 Microsoft API 写的工具也能获得控件ID。
类别名(ClassNameNN)
每个标准的 Microsoft 控件都具有“类别名”,比如“button(按钮)”或者“edit(编辑框)”等等。在 AutoIt 中还把它跟该控件的“实例”组合起来,并称为“ClassNameNN”。比如说某个对话框的上面有三个按钮,则通常它们的“ClassNameNN”就是"Button1", "Button2", "Button3"如此之类。
当控件ID不适用的时候就可以考虑使用这个方法(这种情况通常发生在静态文本控件上)。
文本(Text)
也许你也注意到 AU3Info(AutoIt Window Info) 还给出了控件上的文本信息,例如某个按钮 Next 则在 AU3Info 上看到的就是 &Next (“&”号表示后面跟着的字符将带有下划线,其实我们还能在菜单和其它控件上发现这个符号)。如果您喜欢的话也可以用这些文本代替“ClassNameNN”来识别控件,但是如果有多个控件的文本都相同的话可就有麻烦了。
控件句柄(Control Handle (HWND) )
如果要获得某个控件的句柄则可使用 ControlGetHandle 函数。控件句柄是Windows赋予控件的(独一无二的)标识符。每个被创建的控件都具有不同的句柄。用户在使用控件句柄来对控件操作之前应该确定自己对句柄是非常熟悉的。
请到这里 函数说明(Function Reference) \ 窗口管理(Window Management) \ 控件(Controls) 查看控件函数的说明。
函数说明
WinWait
暂停脚本的执行直至指定窗口存在(出现)为止。
WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] )
参数
窗口标题 | 目标窗口标题。 |
文本 | [可选参数] 目标窗口文本。 |
超时时间 | [可选参数] 以秒为单位。 |
返回值
成功: | 返回值为1。 |
失败: | 返回值为0,说明已超时。 |
注意
无
相关
WinActive, WinExists, WinWait, WinWaitActive, WinWaitClose, WinWaitNotActive, WinWaitDelay(选项)
示例
;等待窗口 "无标题" 出现
Run("notepad")
WinWait("无标题")
;同上,但指定了等待时间为 5 秒
WinWait("无标题", "", 5)
函数说明
ControlSetText
修改指定控件的文本。
ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" )
参数
窗口标题 | 目标窗口标题。 |
窗口文本 | 目标窗口文本。 |
控件ID | 目标控件。请查看关于 控件 的说明。 |
新文本 | 要更新到控件的文本。 |
返回值
成功: | 返回值为1。 |
失败: | 返回值为0,说明未找到目标窗口/控件。 |
注意
无
相关
ControlGetText, ControlCommand
示例
Run("notepad.exe")
WinWait("无标题 -")
ControlSetText("无标题 -", "", "Edit1", "New Text Here,中文也可以" )
函数说明
ControlClick
向指定控件发送鼠标点击命令。
ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] )
参数
窗口标题 | 目标窗口标题。 |
窗口文本 | 目标窗口文本。 |
控件ID | 目标控件。请查看关于 控件 的说明。 |
按钮 | [可选参数] 要点击的按钮,可以是 "left"(左键)、"right"(右键) 或 "middle"(中键)。默认值为 left(左键)。 |
点击次数 | [可选参数] 要点击鼠标按钮的次数。默认值为 1. |
返回值
成功: | 返回值为1。 |
失败: | 返回值为0。 |
注意
在执行此命令前可能还需要使用 ControlFocus 命令把焦点转到目标控件上。
模拟点击控件仅在目标控件的父窗口处于激活状态(一般程序会自动激活该窗口)时才能抱着 100% 的准确性。
相关
ControlCommand, ControlFocus, MouseClick
示例
ControlClick("无标题 -", "", "MDIClient1")
关键字说明
Dim / Global / Local / Const
声明一个变量、全局变量、局部变量、(多维)数组或常数。
Dim [Const] $变量名
Dim $数组名[下标 1]...[下标 n]
参数
const | [可选参数] 若此关键字出现在声明语句中则创建的将是常量而不是变量。 |
$变量名 | 要声明的变量名 |
下标 | 要创建的数组中每一维的元素数量,从 0 到 n-1。 |
注意
关键字 Dim/Local/Global 的作用非常相识
1. 都必须先声明后使用(类似于 VBScript)
2. 都可以创建数组
注意:在 AutoIt 中您可以简单地对一个(并不存在的)变量赋值即可同时创建该变量(比如 $myvar = 0),但人们一般更喜欢显式地声明它们。
在同一行上同时声明多个变量地方法如下所示:
Dim $a, $b, $c
非数组型变量还可以在声明的同时进行初始化:
Dim $a = 2, $b, $c = 20
常量可有如下几种方式声明:
Dim Const $a, $b, $c
Const $a, $b, $c
Const $a = 2, $b, $c = 20
Local Const $a, $b, $c
常量一旦被声明则不能再修改它的值。此外也不能把已存在的变量转换为常量。
Dim/Local/Global 这三者的不同之处在于其声明变量的作用域:
Dim = 如果同名的全局变量并不存在则作用域为局部(如果已有同名的全局变量存在则将复用该变量!)
Global = 将某些变量的作用域强制转换为全局的
Local = 将某些变量的作用域强制转换为 局部/函数 的
在使用变量时程序将首先检查其局部作用域然后再检查其全局作用域。
创建数组时有一个限制:数组最大只能达64维 和/或 共1600万个元素。
关于数组,有一点比较特别,那就是数组允许被(整体)复制,比如:
$mycopy = $myarray
在上例中,$mycopy 将成为数组 $myarray 的一份完整副本并具有同样地维数(不需要事先通过 Dim 语句声明它)。如果变量 $mycopy 本身就已经是数组或已被赋值,则程序将先把它的内容删除随后再执行复制动作。
如果要删除某个数组(比如某个全局数组存储地内容非常大,可能我们就需要把它删除以释放内存空间),只需参考下例对该数组进行赋值即可:
$array = 0
这样之后该数组所占空间将被释放,同时它的值变成 0。
在使用 Dim 语句声明变量时若该变量已经存在则该变量将被删除,同时其维数将被重设为新定义的。
相关
示例
; 示例 1 - 声明变量
Dim $x, $y = 23, $z
Global $PI = 3.14159, $RADIUS
Local $daysWorking = 5
; 示例 2 - 声明数组
Dim $weeklyWorkSchedule[$daysWorking]
Global $chessBoard[8][8]
Local $mouseCoordinates[2], $windowStats[4]
; 示例 3 - 声明常量
Const $x, $y = 23, $z
Global Const $PI = 3.14159, $RADIUS
Local Const $daysWorking = 5
https://www.cnblogs.com/xyf9575/p/6877834.html
https://blog.csdn.net/weixin_34211761/article/details/85965562
https://blog.csdn.net/shuai1972/article/details/101383621/
https://www.cnblogs.com/generalli2019/p/11451211.html