今天(2022-2-10),我在用yinxiang.com印象笔记、iCodeRepository爱码仓库和FileLocatorPro全文检索工具软件这3个工具搜索AutoHotkey脚本代码时发现了一些我从因特网(互联网)上下载的一些测量运行1段AutoHotkey脚本代码所需消耗的时间的脚本代码,我现在复制粘贴出来供广大网友阅读、分享、下载、测试、分类、整理、收藏和运行。
; 代码1:异步执行(我的古董电脑上测试所需消耗的时间大约是3700毫秒左右):
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
SetBatchLines -1
gosub 异步执行
; 下面这个Loop循环会阻塞线程,但异步执行仍然可以工作
loop {
Sleep 10
ToolTip 主线程持续运算演示-%A_Index%
} Return
异步执行:
Run Notepad,, Min, PID
; 这步等效于 WinWait 【等待直到指定的窗口存在】
异步执行2:
if WinExist("ahk_pid " PID)
goto 异步执行3
SetTimer 异步执行2, -10
return
; 这步等效于 Sleep 3000 【延时3秒】,后台往记事本里写入"Sleep 3000 WinActivate",
; 并在3秒后激活记事本窗口
异步执行3:
ControlSend, Edit1, "Sleep 3000 WinActivate", ahk_pid %PID%
SetTimer 异步执行4, -3000
return
异步执行4:
WinActivate, ahk_pid %PID%
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
/*
;;; 精确计时到毫秒
DllCall("QueryPerformanceFrequency","Int64*",QuadPart)
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
;;; MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/QuadPart,0)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
return
*/
; ===== End =============================================
; 代码2:伪并发执行(我的古董电脑上测试所需消耗的时间大约是400毫秒左右):
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
global isSended
isSended := false
SetBatchLines -1
SetTimer 伪并发执行,1
; 下面这个Loop循环会阻塞线程,但伪并发执行仍然可以工作
; 在类似MsgBox等语句执行期间会中止部分线程
; 如需并发执行多项任务可以把各项任务分别写入各自专用的AutoHotkey脚本文件中
; 然后再统一调用执行AutoHotkey脚本文件,让操作系统并发执行不同的多项任务
loop {
Sleep 10
ToolTip 主线程持续运算演示-%A_Index%
} Return
;
伪并发执行()
{
global PID
Process,Exist,Notepad.exe
if (%ErrorLevel%=0)
{
Run Notepad,, Min, OutputVarPID
PID=%OutputVarPID%
}
; MsgBox,PID %PID%
WinGet, WinID, ID,ahk_pid %PID%
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
IfWinActive,ahk_pid %PID%
{
if (not(isSended))
{
ControlSetText, Edit1, "Sleep 3000 WinActivate", ahk_pid %PID%
isSended := true
}
}
IfWinActive,ahk_pid %PID%
{
; WinActivate, ahk_pid %PID%
SetTimer 伪并发执行,Delete
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "Elapsed QPC time is " . Round((CounterAfter - CounterBefore)/10000,0)
ExitApp
}
; }
}
; ===== End =============================================
; 代码3:Send语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是800毫秒):
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
loop,50
{
Send,1
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp
; ===== End =============================================
; 代码4:ToolTip语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是50毫秒):
; 添加了 SetBatchLines -1 语句之后此脚本执行的明显快了许多,没有出现大于50毫秒的情况
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
loop,50
{
ToolTip,1
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp
; ===== End =============================================
; 代码5:WinActivate语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是50毫秒)
; 窗口和控件操作是比较难处理的操作。
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
Run Notepad
loop,50
{
WinActivate,记事本
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp
; ===== End =============================================
; 代码6:SwitchToThisWindow语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是50毫秒):
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
Run Notepad
loop,50
{
WinGet, WinID, ID,记事本
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp
; ===== End =============================================
; 代码7:WinActivate,ahk_pid语句执行50次消耗的时间(我的古董电脑上测试所需消耗的时间是2000毫秒):
; 为何这段代码执行的如此的慢呢?究竟是为什么呢?有什么改进的方法和建议吗?
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
; ==================================================
Run Notepad,, Min, OutputVarPID
loop,50
{
WinActivate,ahk_pid %OutputVarPID%
}
; ==================================================
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
ExitApp
; ===== End =============================================
;
; ==================================================
; 代码8:WinActivate,ahk_pid语句执行50次消耗的时间的第2个版本
; (我的古董电脑上测试所需消耗的时间是500毫秒):
;
#SingleInstance, force
#Persistent
; RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
SetBatchLines -1
global CounterBefore
DllCall("QueryPerformanceCounter","Int64*",CounterBefore)
; ==================================================
global OutputVarPID
Run Notepad,, Min, OutputVarPID
SetTimer,SetTextAndActivateNotepadWindow,100
return
SetTextAndActivateNotepadWindow()
{
ControlSetText,Edit1,插入文本测试,ahk_pid %OutputVarPID%
WinActivate,ahk_pid %OutputVarPID%
;
; 检测插入文本是否成功
ControlGetText,NotepadText,Edit1,ahk_pid %OutputVarPID%
if(%NotepadText%=插入文本测试)
{
; 检测激活窗口是否成功
IfWinActive,ahk_pid %OutputVarPID%
{
DllCall("QueryPerformanceCounter","Int64*",CounterAfter)
MsgBox % "执行此段AutoHotkey代码消耗了" . Round((CounterAfter - CounterBefore)/10000,0) . "毫秒"
; 只有已经成功插入文本并且成功激活窗口之后才可以进行下一步操作或者终止脚本的执行
; 所有任务都完成之后才停止操作,否则SetTimer将一直循环执行各项任务。
ExitApp
}
}
}
; ===== End =============================================
;
以上这些AutoHotkey脚本源代码和其他一些文档、表格、图片、音频、视频、
电子书、软件、游戏是我在搜索引擎中搜索并发现的,
我平时主要有以下12个常用的搜索引擎:
搜索引擎
1、西瓜视频搜索引擎(可以搜索各种视频教程)
https://www.ixigua.com/
2、优酷视频搜索引擎
https://www.youku.com/
3、腾讯视频搜索引擎
https://v.qq.com/
4、爱奇艺视频搜索引擎
https://www.iqiyi.com/
5、淘宝搜索引擎(可以搜索各种网购物品)
https://www.taobao.com/
6、京东搜索引擎
https://www.jd.com/
7、亚马逊搜索引擎
https://www.amazon.cn/
8、简单搜索引擎
https://www.jsousuo.com/
9、必应搜索引擎
https://cn.bing.com/?ensearch=1
10、360搜索引擎
https://www.so.com/
11、百度搜索引擎
https://www.baidu.com/
12、Yandex搜索引擎
https://yandex.com/
我新建文档、表格或AutoHotkey脚本源代码的一般过程是:
第1步:用腾讯QQ登录腾讯文档并新建在线文档或者新建在线表格。
第2步:编辑新建的在线文档或者在线表格
第3步:把腾讯文档中的文档或表格复制到印象笔记中(由于腾讯文档不支持批量搜索文件正文内容,所以只好啰嗦一点,复杂一点了)。
第4步:测试并修改文档、表格或AutoHotkey脚本。
第5步:发布、发送、打印或备份文档、表格或AutoHotkey脚本。
(我非常喜欢腾讯文档和印象笔记的实时自动保存功能,在线实时自动保存能够有效的防止丢失正在编辑的内容,不用担心误操作、误删误改、电脑死机、突然断电、电脑被盗或者其他意外事件对编辑内容的威胁)。
我管理非办公文件的一般过程是:
第1步:自制或者批量下载文件。
第2步:测试文件是否可用(音乐歌曲有声读物能够播放;视频电影能够播放,最好是国语中字的;程序能够实现功能、长期可用并且没有垃圾广告等副作用;电子书能够打开;游戏能够长期运行)。
第3步:用Total Commander 10.00 分类、筛选、重命名、整理已经测试好的非办公文件。
第4步:用FileZillaPro连接群晖NAS的WebDAV文件服务并批量上传已经测试和整理好的非办公文件到Synology群晖网络存储服务器DS920+的RAID 1 镜像存储池中的共享文件夹之中。
第5步:用QuickConnect登录Synology群晖网络存储服务器DS920+并在“Universal Search”套件中正确设置“索引文件夹列表”,预先建立文件索引,以便今后能够通过文件名或者部分文件正文内容片断快速的找到所需的文件。
https://www.autoahk.com/archives/39825
https://blog.51cto.com/ds920/4996987
https://www.cnblogs.com/delphixx/p/15879293.html
分开放代码框,效果更好