;
; 最高级的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. html中各种标签和属性(最基础的基本都有)

    1.标题标签: h1~h6  ctrl+1~6 2.段落标签: p      ctrl+shift+p 3.换行标签: br     shift+回车 4.水平线:   hr 5.加粗标签: stro ...

  2. 关于equals()和hashcode()的一些约定

    本文章主要讨论和回答一下几个问题: equals()的四大特性 equals()和hashcode()之间的关系,为什么我们经常说这两个方法要么都重写,要么都不重写? HashMap.HashSet等 ...

  3. js笔记20

    1.DOM零级事件元素绑定多个click,最后只执行最后一个click    DOM二级事件绑定多个click,都要执行 注意当绑定的多个事件名,函数名,事件发生阶段三者完全一样时,才执行最后一个 第 ...

  4. csu-acm 1503: 点到圆弧的距离

    1503: 点到圆弧的距离 分析: 先判断点和圆心的连线是否在圆弧范围内,如果在,最短距离即到圆心的距离减去半径的绝对值:反之,为到端点的最短距离. 具体看注释 #include <bits/s ...

  5. Springboot:单元测试多模块项目不同模块组件不能@autowired问题

    博主在写springboot单元测试的时候使用@Autowired失效,显示为null 下面是项目架构 api为接口模块,service为实现类模块,测试类写在service模块下. 这是测试类,使用 ...

  6. namenode和datanode启动失败

    1.namenode启动失败,查看错误原因,是无法格式化,再看日志,根据日志提示,清空对应的目录,即可解决这个问题. 2.datanode启动失败: Can't open /var/run/cloud ...

  7. ROS2学习之旅(13)——创建ROS2 功能包

    一个功能包可以被认为是ROS2代码的容器.如果希望能够管理代码或与他人共享代码,那么需要将其组织在一个包中.通过包,可以发布ROS2工作,并允许其他人轻松地构建和使用它. 在ROS2中,创建功能包使用 ...

  8. docker挂载数据卷

    1.Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷,简单的理解就是将数据持久化的工具. 2.在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们 ...

  9. python 01篇

    一.Pycharm 使用小tips 1.1 pycharm创建项目时,选择Python环境,不使用默认的虚拟环境 1.2 如何在pycharm中查看python版本 路径:File-Settings- ...

  10. scrapy::Max retries exceeded with url

    运行scrapy时出错这个错误:Max retries exceeded with url解决方法: img1=requests.get(url=aa,headers=header1,timeout= ...