;
; 最高级的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. UBoot的编译与烧写

    每当我们学习任何编译语言之前,第一节课都是介绍我们要学习的是什么,以及编译语言和工具,最后写一个小程序编译并运行就算入门,也就是所谓的"Hello, world!".这里也不例外, ...

  2. 【知识点】SQLite3总结

    目录 基本的DDL.DML 创建表,包含日期字段 插入一行,包含日期字段 查找,包含日期字段 查找,按照排序以及限制条目输出 删除记录 更新数据 视图 索引 触发器 事务 专业术语 基本的DDL.DM ...

  3. JAVA实现按列表中元素的时间字段排序

    JAVA代码实现按列表中元素的时间字段排序 导语: 工作中遇到一个问题,调用第三方接口返回的数据没有按时间倒序排列,测试说要加,然后在网上找到一个解决办法,这里记录一下 需求: 如下图列表,按生日进行 ...

  4. win7旗舰版任务栏窗口不合并显示,鼠标移至窗口时可预览应用内容

    1.鼠标移至任务栏--右键--属性: 2.选择"当任务栏被占满时合并"或"从不合并",第一个选项更优: 3.右键桌面"计算机"的" ...

  5. @Autowired报错原因分析和4种解决方案!

    上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的正常执行,也就是虽然编译器 IDEA 报错,但程序却能正常的执行,那这其中的原因又是为何? ​ 报错原因分析 报错的原因 ...

  6. 第14章:部署Java网站项目案例

    1 说明 (1) 项目迁移到k8s平台的流程 1) 制作镜像 dockerfile.docker+jenkins持续集成.镜像分类:基础镜像.中间镜像.项目镜像 2) 控制器管理pod 控制器管理po ...

  7. SpringCloud:Eureka注册中心设置显示IP路径

    未设置下的Eureka平台 可以看到Status显示的是 计算机名称! 解决方法: 在每一个需要注册的服务配置内加上如下几行配置 instance: prefer-ip-address: true # ...

  8. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  9. SEO入门一篇就够-SEO教程

    大家口中的SEO(Search Engine Optimization),中文翻译为"搜索引擎优化",从本质上来说,其实就是如何迎合搜索引擎的规则,使得网站在搜索结果中能有更好的排 ...

  10. ctf之SusCTF2017-Crack Zip

    题目信息如下,可知为杂项题,且无提示 下载文件打开如图,该压缩包是加密的 首先想到的是暴力破解,下载zip暴力破解软件打开文件. 下一步,选择暴力破解 进行暴力破解设定,进行破解 破解完成,得到密解压 ...