autoit GUI相关知识

GUI 的概念


GUI 可由一个或多个 窗口 组成,这些窗口又带有一个或多个控件。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的函数。但这些都是比较初级的应用,如果您已经准备好创建更高级的GUI,则还有其它高级的函数。


























    函数 解释
    GUICreate 创建一个窗口。
    GUICtrlCreate... 创建各种控件。
    GUISetState 显示或隐藏窗口。
    GUIGetMsg 通知GUI检测是否有事件发生(仅用于消息循环)。
    GUICtrlRead 读取控件数据。
    GUICtrlSetData 设置/更改 控件的数据。
    GUICtrlSet... 对控件进行各种属性设置(颜色、风格等等)。

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

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

    #include <GUIConstants.au3>

    GUICreate("您好", 200, 100)
    GUISetState(@SW_SHOW)
    Sleep(2000)

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

    #include <GUIConstants.au3>

    GUICreate("您好", 200, 100)
    GUICtrlCreateLabel("最近过得怎样?", 30, 10)
    GUICtrlCreateButton("还OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)
    Sleep(2000)

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

    GUI 事件模式


    正如上面所提到的那样,我们有两种基本的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模式 的更详细的解释请到 此页 查看。

  • (0)

    相关推荐

    • autoit GUI相关知识

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

    • Python解析json文件相关知识学习

      JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 今天用pytho

    • 简述SQL Server 2005数据库镜像相关知识

      SQL Server 数据库中,数据库镜像是用于提高数据库可用性的主要软件解决方案.数据库镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库.简单恢复模式和大容量日志恢复模式不支持数据库镜像,数据库镜像不能镜像master.msdb.tempdb 或 model 数据库.本文我们主要就介绍一下数据库镜像的相关知识,接在来就让我们来一起了解一下吧! 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的SQL Server 数据库引擎实例(服务器实例)上.通常,这些服务器实例驻留

    • Java8中lambda表达式的应用及一些泛型相关知识

      语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public class Employee { public String name; public int age; public char sex; public String time; public int salary; } 我们有一列此类数据 List<Employee> data = Arrays.asL

    • java中数组的相关知识小结(推荐)

      1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[]ags; ags=new int{1,2,3,4}; 或者 int[]ags=new int{1,2,3,4}; 3.java不支持不同类型的重名数组 4.java中数组的循环赋值 package dierge; public class Shuzu { public static void main

    • 今天抽时间给大家整理jquery和ajax的相关知识

      hi,今天礼拜二,做点什么事呢,哎想起来了,正好前两天在一直都在学习ajax相关知识,今天接着学jquery和ajax的相关知识吧. 1.jQuery -----jQuery与AJAX----- AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和XML(标准通用标记语言的子集). AJAX 是一种用于创建快速动态网页的技术. 通过在后台与

    • JS闭包、作用域链、垃圾回收、内存泄露相关知识小结

      补充: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的定义及其优缺点 闭包 是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露. 闭包是javascript

    • 关于python的list相关知识(推荐)

      如下所示,一起跟随小编过来看看吧! list01 = ['alex',12,65,'xiaodong',100,'chen',5] list02 = [67,7,'jinjiao_dawang','relax1949',53]   #打印list01.list02 print(list01) print(list02)   #列表截取.切片 print(list01[1]) print(list01[-2]) print(list01[1:3])   #列表重复 print(list01 * 3

    • Python3中的列表,元组,字典,字符串相关知识小结

      一.知识概要 1. 列表,元组,字典,字符串的创建方式 2. 列表,元组,字典,字符串的方法调用 3. 列表,元组,字典,字符串的常规用法 二.列表 # 列 表 # 列表基础 list_1 = ['a','b','c','d','e','f'] list_2 = ['apple','banana','watermelon','strawberry','banana','apple'] print(list_1) print("##########") # 列表得下标是从0开始的,之后的

    • struts2的流程和一系列相关知识代码解析

      1.客户端初始化一个指向servlet容器(Tomcat)的请求: 2.这个请求经过一系列的过滤器,接着FilterDispatcher被调用: 3.FilterDispatcher询问ActionMapper来决定这个请求是否要调用某个action: 4.如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,ActionPro根据ConfigurationManager询问框架的配置文件,找到需要调用的Action类,一般

    随机推荐