;
; 最高级的AutoHotkey重试源代码结构20191221.docx
;
; 在编写AutoHotkey脚本时经常要用到重试,
; 单击控件无效时需要重新再单击,
; 发送模拟按键无效时需要重新发送。
; 经过我长期的测试研究,发现SetTimer计时器周期执行是最好的最高级的重试代码结构。
; SetTimer的优点1: 各个计时器并行同时执行互不影响,不像Loop循环、For循环或者WinWait那样只能同时做一件事,一件事没有做好时无法做其他事情,整个脚本会阻塞在循环中无法自拔,犹豫不前。
; SetTimer的优点2: 先写SetTimer声明创建部分,就像书本的总目录,再写对应的功能定义函数,就像书本的正文内容。代码条理清晰,方便今后阅读修改。实现函数化,模块化,区块化编程。
; SetTimer的优点3: 通过同时启动不同的计时器可以充分利用电脑的运行时间资源,满足什么条件就立即做什么事情,无需盲目等待。可以做到精确等待,不多等浪费时间,不少等错过操作时机(不会在窗口还没有完全显示出来就发送模拟按键等原因引起的无对象操作失败事故出现)。
; 如果有网友发现更好的重试代码结构可以通过腾讯QQ邮箱 595076941@QQ.com 联系告诉我,谢谢

; 示例 #1: 在Windows7专业版中运行记事本并显示打开对话框
#SingleInstance,force
#Persistent
SetTitleMatchMode,2
;
; 运行程序
SetTimer,RunExeFile,-100
; 激活窗口
SetTimer,SwitchToThisWindow,100
; 发送模拟键击到控件
SetTimer,ControlSendKeys,100
; 完成所有任务后删除计时器
SetTimer,AllMissionComplete,100
return
;
RunExeFile()
{
;~ IfExist,C:\Windows\notepad.exe
;~ {
IfWinNotExist,记事本 ahk_class Notepad ahk_exe notepad.exe
{
Run,notepad
}
;~ }
}
;
SwitchToThisWindow()
{
IfWinNotActive,记事本 ahk_class Notepad ahk_exe notepad.exe
{
;~ WinActivate [, WinTitle, WinText, ExcludeTitle, ExcludeText]
WinGet, WinID, ID,记事本
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
;~ WinGetActiveTitle,WinActiveTitlekp
;~ IfInString,WinActiveTitlekp,窗口标题
}
}
;
ControlSendKeys()
{
;~ IfWinActive,记事本
;~ {
IfWinNotExist,打开 ahk_class #32770, 地址
{
ControlSend,msctls_statusbar321,{CtrlDown}o{CtrlUp},记事本 ahk_class Notepad ahk_exe notepad.exe
}
;~ }
}
;
AllMissionComplete()
{
; 完成所有任务后删除计时器
IfWinActive,打开 ahk_class #32770, 地址
{
SetTimer,RunExeFile,Delete
SetTimer,SwitchToThisWindow,Delete
SetTimer,ControlSendKeys,Delete
SetTimer,AllMissionComplete,Delete
}
}
; ===== 脚本结束 =====

; 在编写AutoHotkey的重试源代码区块段落结构时应当注意以下几点:
; 注意点1:每个计时器任务应当是不可再分的最细小的任务。
; 注意点2:每个任务单独定义一个计时器,互相并行同时操作,互不影响。
; 注意点3:计时器时间间隔周期值(毫秒数)应当合适恰当,数值太大性能不好,数值太小资源占用太严重。
; 注意点4:在执行操作(例如:发送按键,单击控件)之前应根据情况预先判断是否满足操作条件
; (例如:文件是否存在,文件夹是否存在,磁盘是否存在,网络是否存在,
; 窗口是否已经创建完毕,控件是否已经创建完毕等等),
; 如果条件不满足则跳过执行,进入下一个计时器周期再重新判断操作条件。
; 注意点5:应当等到完成所有任务之后才删除所有计时器。
; 注意点6:应当充分注意一些互斥条件的操作前预先判断。
; 例如:主窗口和子窗口的激活,当子窗口已经激活时就不应当在激活主窗口了,
; 否则主窗口和子窗口要同时激活就会死循环出错,一般情况下,对话框总是属于子窗口。
; IfWinNotActive,子窗口
; {
; WinActivate,主窗口
; }
;
; 以下是本文的重复副本容灾备份网址:
; 重复副本容灾备份网址1:
; 重复副本容灾备份网址2:
http://autoHotkey.bokee.com/507519527.html
; 重复副本容灾备份网址3:
https://www.cnblogs.com/delphixx/p/12102538.html

最高级的AutoHotkey重试源代码结构20191221.docx的更多相关文章

  1. 在屏幕上搜索图片并返回图片所在位置的坐标的AutoHotkey脚本源代码(类似大漠插件)

    ;~  在屏幕上搜索图片并返回图片所在位置的坐标的AutoHotkey脚本源代码(类似大漠插件) ; https://www.autohotkey.com/boards/viewtopic.php?t ...

  2. MINA2 源代码学习--源代码结构梳理

    一.mina总体框架与案例: 1.总体结构图: 简述:以上是一张来自网上比較经典的图,总体上揭示了mina的结构,当中IoService包括clientIoConnector和服务端IoAccepto ...

  3. Android 源代码结构(转)

    简介 在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试.但是,如果目标版本的SDK没有关联对应版本的源代码的 ...

  4. Android相框 与 源代码结构

    一. Android 相框 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android执行环境层; -- 应用框架层; -- 应 ...

  5. Android 源代码结构

    简介 在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试.但是,如果目标版本的SDK没有关联对应版本的源代码的 ...

  6. 升讯威微信营销系统开发实践:(4)源代码结构说明 与 安装部署说明( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  7. ABP项目启动及源代码结构

    在整体介绍ABP项目之前我们需要从官方网站下载模板项目,下载以后放到一个本地目录下,启动VS打开源代码.具体下载的步骤如下: 一   创建ABP项目模板 1 进入官方网站然后选择特定的样板项目. 2 ...

  8. Android 5.0 源代码结构

    本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/artic ...

  9. redis源代码结构解析

    看了黄建宏老师的<Redis设计与实现>,对redis的部分实现有了一个简明的认识: 之前面试的时候被问到了这部分的内容,没有关注,好在还有时间,就把Redis的源码看了一遍. Redis ...

随机推荐

  1. 删除主键时报错ORA-00955

    一.利用已有索引创建主键1.建表GAO@PROD> create table abcd(id number(10),name1 varchar2(20)); Table created. 2.插 ...

  2. SpringCloud(6)Eureka架构与CAP原则与取舍策略

    一:Eureka架构 Register(服务注册):把自己的 IP 和端口注册给 Eureka. Renew(服务续约):发送心跳包,每 30 秒发送一次,告诉 Eureka 自己还活着.如果 90 ...

  3. etcd 添加用户,授权特定目录

    适用场景 多组共用etcd集群,创建一个新用户.新目录,让这个新用户只有新目录的使用权限. 命令和顺序 创建目录,注意此处是v2 curl -u root:pwd http://host:2379/v ...

  4. gomod使用小结

    gomod使用小结 使用方法 把工程拷贝到$GOPATH/src之外 在工程目录下执行:go mod init {module name}该命令会创建一个go.mod文件 然后在该目录下执行 go b ...

  5. 关于React Native常用技巧

    Doctor命令检查所需环境 @2019年11月18日,React Native v新增了一个环境检查和诊断命令行,可以帮助新手修复环境,输出环境依赖报告. 先建好的一个React Native项目, ...

  6. Vsftpd配置(Centos7)

    6.1.Vsftpd介绍: 用于上传图片和使用 FTP 协议访问图片服务器. 解决分布式环境的图片访问问题,使用vsftpd对图片做统一管理. vsftpd 是"very secure FT ...

  7. 105、如何使用u盘制做linux镜像

    105.1. 105.2. 105.3. 105.4.

  8. 4、nfs服务器的搭建

    4.1.nfs服务介绍: samba服务器一般互联网企业不会使用 nfs服务的端口是不固定的,需要先启动rpc服务对nfs服务端口进行注册 4.2.安装nfs: rpm -qa nfs-utils r ...

  9. AvtiveMQ与SpringBoot结合

    首先来了解下ActivieMQ的应用场景,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构是大型分布式系统不可缺少的中间件 ...

  10. docker基本操作和部署

    #安装所需的软件包.yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data ...