;
; 最高级的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. DOS命令行(5)——Windows系统的配置与管理(下)

    whoami --查看当前有效用户 这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID).声明.本地系统上当前用户的权限.登录标识符(登录 ID).例如, ...

  2. 在vue项目中使用scss,以及vscode适配scss语法(解决使用scss语法编辑器报错)

    项目搭建好之后 安装sass 依赖包 npm install --save-dev sass-loader //sass-loader依赖于node-sass npm install --save-d ...

  3. BGP路由技术

    BGP路由技术 目录 一.BGP概述 1.1.自治系统 1.2.动态路由分类 1.3.BGP概念 1.4.BGP的特征 1.5.BGP工作原理 二.命令配置 2.1.BGP配置思路 2.2.命令 一. ...

  4. 在Visual Studio 中使用git——同步到远程服务器-下(十二)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  5. Springboot下载Excel的3种方式

    Springboot下载Excel的3种方式 汇总一下浏览器下载和代码本地下载实现的3种方式. (其实一般都是在代码生成excel,然后上传到oss,然后传链接给前台,但是我好像没有实现过直接点击就能 ...

  6. Windows10 准备/安装Flutter研发环境

    Flutter简介 Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台. Flutter 中国 安装Flutte ...

  7. Tomcat 中文乱码,设置UTF-8

    1.修改tomcat的conf目录下 server.xml文件加上 URIEncoding="UTF-8" <Connector port="8080" ...

  8. 230th Weekly Leetcode Contest

    题目二 题目描述 5690. 最接近目标价格的甜点成本  难度:中等-中等 题解 解法一:三进制状态压缩 考虑到baseCosts.toppingCosts的长度最多都为10,每一种辅料都有加0.1. ...

  9. 桌面Linux系统的先驱者慕尼黑现在正在考虑切换回Windows

    From: http://arstechnica.com/business/2014/08/linux-on-the-desktop-pioneer-munich-now-considering-a- ...

  10. 线程中sleep()方法和wait()方法的前生今世

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 不知道大家有没有这种感觉,在公 ...