autoit GUI相关知识(autoit和autohotkey)全程干货

随心笔谈1年前 (2023)发布 admin
128 0



GUI 可由一个或多个 窗口 组成,这些窗口又带有一个或多个控件。GUI是靠“事件驱动”实现与用户的交互的,比如像点击按钮这样的动作就会引发一个事件。程序在空闲状态时等待事件的发生,捕捉到事件时则根据事件执行相关操作。您可以猜想自己在门边等邮差(一直坐在那儿直到有信被送进来为止),等邮差把信送来了,您就要阅读该信并决定下一步做什么,这就跟GUI的原理一样了:您等待的是邮差,而GUI则等待事件,

当然,在GUI(指程序的界面)运行时您也可以选择要做的其它任务,比如使用GUI函数创建一个自动更新的动态的进度条,同时还可执行其它复杂的任务。

所有用户应该都对控件非常了解了,在窗口上能被点击或进行其它交互的部分都是控件的一种。AutoIt 可创建的控件类型有如下几种(您肯定已在其它Windows程序中见过它们了):

Label
纯文字控件

Button
按钮

Input
单行编辑框,可供输入文字

Edit
多行编辑框,可供输入文字

Checkbox
方框按钮,可被选中或取消选中

Radio
圆形按钮(通常几个一组,每次只能激活/选中其中一个)

Combo
组合框,带有下拉列表

List
列表框

Date
日期选择

Pic
图片

Icon
图标

Progress
进度条

Tab
标签,每个标器都可包含一组控件

UpDown
可附加到输入型控件上

Avi
显示 AVI 格式的剪辑

Menu
位于窗口顶部的菜单

ContextMenu
当在窗口上点击右键时出现的菜单

TreeView
类似于Windows的资源管理器(树型视图)

Slider
类似于Windows的音量控件(滑动条)

ListView
按列显示信息的控件(列表视图)

ListViewItem
ListView控件的项目

Dummy
虚拟的用户控件

下面是一个单窗口的GUI示例,它包含了许多被AutoIt支持的控件。从中我们可以看到 AutoIt 确实可以创建内容非常丰富的GUI!

使用 GUICtrlCreate… 等函数即可创建控件。在创建时函数会返回 控件ID。关于控件ID有几个注意事项:

控件ID是一个正数(意即该数大于0)
每个控件ID都具有唯一性(即使有多个窗口存在)。
控件ID可通过 AutoIt Window Info 获得。

下面这些就是可用于创建GUI的函数。但这些都是比较初级的应用,如果您已经准备好创建更高级的GUI,则还有其它高级的函数。

函数
解释

GUICreate
创建一个窗口。

GUICtrlCreate…
创建各种控件。

GUISetState
显示或隐藏窗口。

GUIGetMsg
通知GUI检测是否有事件发生(仅用于消息循环)。

GUICtrlRead
读取控件数据。

GUICtrlSetData
设置/更改 控件的数据。

GUICtrlSet…
对控件进行各种属性设置(颜色、风格等等)。

在您着手编写任何GUI脚本之前别忘了先包含文件 GUIConstants.au3 到脚本开头位置(该文件包含了在编写GUI程序时要用到的所有变量和常量)。

让我们先来创建一个窗口吧,把它命名为“您好”,设置其长宽分别为200和100个象素。当窗口被创建时它是被隐藏的,所以我们还要先把它给“show(显示)”出来。

#include

GUICreate(“您好”, 200, 100)

GUISetState(@SW_SHOW)

Sleep(2000)

如果运行上面的脚本您会看到出现一个窗口并在两秒后消失。看来还不是很有意思哦…那让我们尝试增加一些文字和一个确定按钮到窗口上吧!我们把文字加到 30, 10 这个位置并把按钮放到 70, 50 这个位置,按钮宽度设为60个象素。

#include

GUICreate(“您好”, 200, 100)

GUICtrlCreateLabel(“最近过得怎样?”, 30, 10)

GUICtrlCreateButton(“还OK吧”, 70, 50, 60)

GUISetState(@SW_SHOW)

Sleep(2000)

好,现在看来还不错。但是怎样使这个GUI能响应我们点击按钮的事件呢?这时我们必须先决定究竟如何处理事件:要么通过 消息循环(MessageLoop) 要么通过 OnEvent 函数。

正如上面所提到的那样,我们有两种基本的GUI模式:消息循环(MessageLoop)模式和 OnEvent 模式。这两种模式是响应GUI事件的不同的实现方式。具体选择哪一种模式主要看您的 个人喜好 或者您想要创建的GUI类型。这两种模式都能用于创建任何您想要的GUI,只不过某些时候使用其中一个会比另外一个要好用些。

消息循环是默认的模式。若要切换为 OnEvent 模式请使用 Opt(“GUIOnEventMode”, 1) 语句。

消息循环模式(默认)

在消息循环模式下,脚本大部分时间都在执行一个周期非常短的循环,这个循环通知GUI使用 GUIGetMsg (截获消息)函数。当某个事件发生时 GUIGetMsg 函数把消息作为返回数值返回(比如某个按钮被按下、GUI被关闭,等等)。

在此模式下,只有当我们频繁地使用 GUIGetMsg 函数时才有可能接收到事件,因此您必须确保在每一秒内都有数次调用该函数,否则您的 GUI 将无法响应事件。

这一模式最适合用于那些以 GUI 为重点的脚本中,并且您最关心的就是等待用户事件。

如需了解关于 消息循环模式 的更详细的解释请到 此页 查看。

OnEvent 模式

在OnEvent模式下,脚本并不需要频繁地要求GUI检查是否有任何事件发生(并根据返回信息处理事件),而是仅当某个事件发生时GUI才临时性暂停脚本并调用一个用户预定义的函数来处理该事件。例如,假定用户点击了按钮1则GUI将暂停主脚本并调用某个预定义的用户函数来处理按钮1事件。当该函数完成处理操作后才回到主脚本继续执行。这个模式比较类似 Visual Basic 的窗体方法。

这一模式最适合用于那些 GUI 处于第二重要地位的脚本中,并且您的脚本需要优先执行其它任务。

如需了解关于 OnEvent模式 的更详细的解释请到 此页 查看。

您可能感兴趣的文章:Python+AutoIt实现界面工具开发过程详解python+selenium+autoit实现文件上传功能AutoIt脚本的反编译和代码格式化问题分析使用AutoIT实现自动登录/退出客户端软件,删除日志autoit 更改个人文件夹的小工具AutoIt3和按键精灵的功能对比autoit入门教程小结Python selenium使用autoIT上传附件过程详解

© 版权声明

相关文章