注意:窗口标题和窗口文本参数总是对大小写敏感的。 
1、等待窗口系列命令/函数 
AHK和AU3都提供了用法类似的一组窗口等待命令/函数:WinWait/WinWaitActive/WinWaitClose。 
它们分别用于等待窗口出现、等待窗口被激活、等待窗口被关闭。由于这些命令/函数的参数类似,现仅以WinWait为例说明。 
AHK: 
WinWait [, 窗口标题, 窗口文本, 超时时间, 排除标题, 排除文本] 
AU3: 
WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] ) 
WinWait 的作用是在目标窗口出现之前不再执行后面的所有语句。 
假设我们要运行记事本程序,并在其窗口出现时提示用户: 
【示例 3.1.1 】

AHK: 
Run Notepad 
WinWait, 无标题 - 记事本 
MsgBox 记事本窗口已被打开! 
AU3: 
Run("Notepad") 
WinWait("无标题 - 记事本") 
MsgBox(0, "", "记事本窗口已被打开!")

2、激活窗口相关命令/函数 
让目标窗口成为活动窗口的办法就是激活它,可用的命令/函数是WinActivate: 
AHK: 
WinActivate [,窗口标题, 窗口文本, 排除标题, 排除文本] 
AU3: 
WinActivate ( "窗口标题" [, "窗口文本"] )

3、关闭窗口 
关闭窗口有两种方式,一种是正常的关闭窗口(WinClose),另一种则是强行关闭窗口(WinKill): 
AHK: 
WinClose/WinKill [,窗口标题, 窗口文本, 超时时间,, 排除标题, 排除文本] 
AU3: 
WinClose/WinKill ( "窗口标题" [, "窗口文本"] )

现在我们已经可以实现一个比较简单的功能了,比如我们可以打开系统属性窗口并等待其出现,窗口出现后激活它,接着等待3秒再关闭它: 
【示例 3.1.2 】

AHK: 
Run, Sysdm.cpl 
WinWait, 系统属性 
WinActivate, 系统属性 
WinWaitActive, 系统属性 
Sleep, 3000 
WinClose, 系统属性 
WinWaitClose, 系统属性 
AU3: 
Run("Control Sysdm.cpl") 
WinWait("系统属性") 
WinActivate("系统属性") 
WinWaitActive("系统属性") 
Sleep(3000) 
WinClose("系统属性") 
WinWaitClose("系统属性")

建议:如果程序中频繁地出现要用到这些窗口标题的地方,会带来一个问题:脚本的可读性,也许你会想,这不是很直观吗?可问题是如果这个重复出现的窗口标题是个很长的字符串呢?这将严重影响整个代码的排版美观。而且我们也无从了解这些窗口标题的“来头”,不知道这个窗口标题究竟是怎么来的。而如果我们定义一个变量(假设变量名是“AppWindow1”)保存这个窗口标题,我们就能在命令/函数中用变量来表示它,这样就达到了让代码用意更清晰一点的目的。另外,就算目标软件因某些原因(比如升级)而改变了它的窗口标题,我们也能很方便地作出修改。

4、更准确的标识窗口的方法(主要针对AHK脚本) 
程序在运行时起码会有一个进程,如果能获得这个进程ID就能在一定程度上保证对窗口的准确标识。另外,每个窗口都有定义窗口类名(Class,比如说记事本窗口的类名就是Notepad),所以我们可以以此排除与目标窗口不同的其它窗口类。其实,我们还有一个更准确的方法: 
每个窗口(包括控件在内)都被Windows指派了一个可区别于其它窗口的唯一的标识符(ID),我们称之为窗口句柄(HWND)。 
直接给定窗口标题来表示窗口的一个缺点就是无法保证在脚本运行的过程中始终以该窗口为操作目标,因为在这个过程中很有可能会有其它“同名”窗口(或者说满足匹配条件的窗口)出现,而如果我们使用这个标识符来表示窗口自然就能保证命令/函数的操作窗口总是同一个窗口了。 
我们先来了解一下获得窗口句柄的命令/函数: 
AHK: 
WinGet[, 输出变量, ID, 窗口标题, 窗口文本, 排除标题, 排除文本] 
AU3: 
WinGetHandle ( "窗口标题" [, "窗口文本"] ) 
其中WinGet获得的窗口ID将通过“输出变量”返回,而WinGetHandle的返回值就是获得的窗口ID。

我们在进行自动化操作时是要先运行某个程序,如何获得这个程序成功运行后显示的窗口句柄?一个比较保险的办法是先获得这个程序的进程ID,然后根据这个进程ID获得它的窗口句柄,AHK支持使用进程ID作为窗口标题使用;但AU3不支持这样使用,只能先获得该窗口的类名再根据该类名来获得窗口句柄(不够保险): 
【示例 3.1.3 】 
AHK: 
Run, NotePad, , , ThisPID 
WinWait, ahk_pid %ThisPID%

;这里的ahk_pid表明跟在后面的变量是进程ID 
WinGet, ThisID, ID, ahk_pid %ThisPID%

;ThisID将保存获得的窗口句柄 
AU3:

Opt("WinTitleMatchMode", 4) 
Run("Notepad") 
$handle = WinGetHandle("classname=Notepad") 
现在暂且先忘记了AU3吧,因为它的窗口函数一般都不支持使用窗口句柄作为(窗口标题)参数。 
至于如何在AHK中使用窗口句柄,简单的说,凡是有“窗口标题”参数的命令就可以用窗口句柄来代替,比如: 
【示例 3.1.4 】 
AHK: 
Run, Notepad, , , ThisPID

;先获得运行的记事本程序的进程ID 
WinWait, 无标题 - 记事本 ahk_pid %ThisPID%

;等待该进程窗口的出现 
WinGet, ThisHWND, ID, 无标题 - 记事本 ahk_pid %ThisPID%

;获得窗口句柄 
WinActivate, ahk_id %ThisHWND% 
;这里的ahk_id表明跟在后面的变量是窗口句柄 
WinWaitActive, ahk_id %ThisHWND% 
Sleep, 3000 
WinClose, ahk_id %ThisHWND% 
WinWaitClose, ahk_id %ThisHWND%

详细出处参考:http://www.jb51.net/article/14870_3.htm

最新文章

  1. 初学seaJs模块化开发,利用grunt打包,减少http请求
  2. CozyRSS开发记录15-获取和显示RSS内容
  3. 转I2s
  4. Mac & XCode 使用技巧总结
  5. css before&after 特殊用途
  6. Mysql--学习笔记(==》简单查询三)
  7. linux win 的换行转换
  8. C++ inline weak symbol and so on
  9. linux网络子系统内核分析
  10. jquery个人笔记
  11. dom4j中对xml的查增
  12. Oracle 11g R2安装手册(图文教程)For Windows
  13. 无线网卡连接internet,有线网卡向另一台电脑分享网络(笔记本当有线路由器)
  14. _rank
  15. 记一次 Spring 事务配置踩坑记
  16. 1.3.8、CDH 搭建Hadoop在安装之前(端口---Apache Flume和Apache Solr使用的端口)
  17. python测试开发django-22.admin首页和title修改
  18. IIS8.5关于“ 配置错误 不能在此路径中使用此配置节”的解决办法
  19. FCT需求分析
  20. Android快速开发不可或缺的11个工具类(下载)

热门文章

  1. python从入门到大神---1、初始化实例、类属性、方法
  2. flutter SnackBar
  3. Centos6.5安装mysql5.7.19
  4. python执行环境
  5. vue中解决拖动和点击事件的冲突
  6. javascript面向对象编程笔记(函数)
  7. Windows服务调试状态下用Console启动
  8. element-ui 框架中使用 NavMenu 导航菜单组件时,点击一个子菜单会出现多个子菜单同时展开或折叠?
  9. ctrl+shift+k取消
  10. Remember, every day is a miracle.