AutoHotkey代码测试助手-2022年1月15日
;
;
; AutoHotkey代码测试助手
; 2022年1月15日
; By ds920
;
; 用法:
; 第1步:运行此脚本
; 第2步:在SciTE4AutoHotkey窗口中选中需要测试的代码
; 第3步:按快捷键F4,此脚本会将选中的代码复制到新的独立的待测试脚本文件中
; 第4步:调整被测试相关窗口的位置和大小
; 第5步:按快捷键F6,开始测试选中的代码,
; 由于选中的代码通常只有一行或者几行,
; 测试代码很少具有针对性,
; 不易混淆,提高了测试效果和效率.
;
; 专注于测试一行或者少量的几行代码更容易测试成功并且得到正确的代码语句
;
; 源代码下载网址:
; https://gitee.com/ds920/CodeTestHelper
; https://www.cnblogs.com/delphixx/p/15806255.html
;
; 设置环境变量
#SingleInstance,force
#Persistent
#NoEnv
#WinActivateForce
;~ #NoTrayIcon
;~ #Warn
SetWorkingDir,%A_ScriptDir%
DetectHiddenWindows,On
SetTitleMatchMode,2
;
; 设置变量
global SciTE_Path
SciTE_Path:="D:\Program\AutoHotkey\SciTE"
global TestAHK_Name
global TestAHK_FullPath
;
; 创建热键
Hotkey,F4,HotkeyF4
Hotkey,F6,HotkeyF6
ToolTip,请选中需要测试的AHK代码 并按快捷键F4复制代码
SetTimer, RemoveToolTip, -8000
;
return
;
HotkeyF4()
{
TestAHK_Name=Test_%A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec%
TestAHK_FullPath=D:\AHKCode\TestCode\%TestAHK_Name%.ahk
Send,^c
FileCreateDir,D:\AHKCode\TestCode
FileAppend, ; 这里需要逗号.
(
#SingleInstance,force
#Persistent
#NoEnv
#WinActivateForce
;~ #NoTrayIcon
;~ #Warn
SetWorkingDir,%A_ScriptDir%
DetectHiddenWindows,On
SetTitleMatchMode,2
;
), %TestAHK_FullPath%
; MsgBox,%TestAHK_FullPath%
Run,%SciTE_Path%\SciTE.exe %TestAHK_FullPath%
Sleep,1000
Send,^{End}
Sleep,200
Send,{Enter 2}
Sleep,500
Send,^v
ToolTip,保存脚本之后 按快捷键F6开始测试
SetTimer, RemoveToolTip, -8000
}
;
HotkeyF6()
{
ToolTip,测试编号:%TestAHK_Name%
; Send,^s
Run,%TestAHK_FullPath%
SetTimer, RemoveToolTip, -8000
}
;
RemoveToolTip:
ToolTip
return
;
; MsgBox,Msg123
;
; 我会在空余时间用微软的 Visual Studio 2015 简体中文版中的 C++ 语言 和
; 简体中文汉化版 Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite.v17.0 中的Pascal 语言
; 重新制作,重构,优化,测试,改进,分享,发布此"代码测试工具"
;
; 使得此"代码测试工具"能够辅助 AutoHotkey,AutoIT,
; C++(Visual Studio 2015 简体中文版),Pascal(Embarcadero.Delphi.11.0简体中文汉化版),
; Python,JAVA 和 C# 的代码编程制作开发科学研究测试部署.
; 常见的窗口PSY嗅探检测工具有:
; 001-星雨朝霞的AHKInfo 1.3.5
; 002-FindText()8.6- 屏幕抓字生成字库工具与找字函数——FeiYue
; 003-ViewWinzard 2.63
; 004-WindowSpy
; 005-AHK_Window_Info
; 006-Spy++
; 007-MacroCreator
; 008-AU3Record
; 009-AutoScriptWrite
; 010-PuloversMacroCreator
/*
; 我常用的SetTimer循环操作代码结构
; ----- 1 -----
#SingleInstance,Ignore
#Persistent
runwith("admin")
loop,5
{
DetectHiddenWindows,On
Sleep,5
IfWinExist,7z-E-Mail-595076941@QQ.COM
ExitApp
}
Gui, Show, Hide,7z-E-Mail-595076941@QQ.COM
DetectHiddenWindows,On
SetTitleMatchMode,2
; 启动7z安装程序
SetTimer,SetupTimer,500
return
SetupTimer()
{
; 1、如果程序没有运行则运行程序
Process,Exist,7z2106.exe
if (%ErrorLevel%=0)
{
IfExist,%A_ScriptDir%\7z2106.exe
{
Run,%A_ScriptDir%\7z2106.exe
}
else
{
MsgBox,找不到文件 %A_ScriptDir%\7z2106.exe
return
}
}
ControlSend, Button2,{Space}, 7-Zip 21.06 Setup ahk_class #32770 ahk_exe 7z2106.exe, Cancel
Sleep,2000
IfWinExist,7-Zip,installed
{
SetTimer,SetupTimer,Delete
ControlSend, Button2,{Space}, 7-Zip 21.06 Setup ahk_class #32770 ahk_exe 7z2106.exe, Cancel
MsgBox,,,已成功安装7-Zip软件,2
ExitApp
}
}
; 非常感谢 RunWith() 函数作者 空
; 这个 RunWith() 函数解决了我的一大难题
; https://www.autoahk.com/archives/35533
; 强制自身进程以 管理员权限 或 普通权限 或 ANSI 或 U32 或 U64 版本运行。
; 例1: runwith("admin","u32") 强制自身以 u32 + 管理员权限 运行。
; 例2: runwith("","ansi") 强制自身以 ansi 版本运行(权限不变)。
; 例3: runwith("normal") 强制自身以 普通权限 运行(版本不变)。
RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default")
{
; 格式化预期的模式
switch, RunAsAdmin
{
case "Normal","Standard","No","0": RunAsAdmin:=0
case "Admin","Yes","1": RunAsAdmin:=1
case "Default": RunAsAdmin:=A_IsAdmin
default: RunAsAdmin:=A_IsAdmin
}
switch, ANSI_U32_U64
{
case "A32","ANSI","A": ANSI_U32_U64:="AutoHotkeyA32.exe"
case "U32","X32","32": ANSI_U32_U64:="AutoHotkeyU32.exe"
case "U64","X64","64": ANSI_U32_U64:="AutoHotkeyU64.exe"
case "Default": ANSI_U32_U64:="AutoHotkey.exe"
default: ANSI_U32_U64:="AutoHotkey.exe"
}
; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数)
for k, v in A_Args
{
if (RunAsAdmin=1)
{
; 转义所有的引号与转义符号
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
; 无论参数中是否有空格,都给参数两边加上引号
; Run 的内引号是 "
ScriptParameters .= (ScriptParameters="") ? """" v """" : A_Space """" v """"
}
else
{
; 转义所有的引号与转义符号
; 注意要转义两次 Run 和 RunAs.exe
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
; 无论参数中是否有空格,都给参数两边加上引号
; RunAs.exe 的内引号是 \"
ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\"""
}
}
; 判断当前 exe 是什么版本
if (!A_IsUnicode)
RunningEXE:="AutoHotkeyA32.exe"
else if (A_PtrSize=4)
RunningEXE:="AutoHotkeyU32.exe"
else if (A_PtrSize=8)
RunningEXE:="AutoHotkeyU64.exe"
; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。
if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE))
return
; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。
else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)"))
{
预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限"
当前权限:=(A_IsAdmin=1) ? "管理员权限" : "普通权限"
ErrorMessage=
(LTrim
预期使用: %ANSI_U32_U64%
当前使用: %RunningEXE%
预期权限: %预期权限%
当前权限: %当前权限%
程序即将退出。
)
MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage%
ExitApp
}
else
{
; 获取 AutoHotkey.exe 的路径
SplitPath, A_AhkPath, , Dir
if (RunAsAdmin=0)
{
; 强制普通权限运行
switch, A_IsCompiled
{
; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
; 工作目录不用单独指定,默认使用 A_WorkingDir 。
case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide
default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide
}
}
else
{
; 强制管理员权限运行
switch, A_IsCompiled
{
; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
; 工作目录不用单独指定,默认使用 A_WorkingDir 。
case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters%
default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters%
}
}
ExitApp
}
}
; -----2-----
#SingleInstance,Ignore
loop,5
{
DetectHiddenWindows,On
Sleep,5
IfWinExist,E-Mail-595076941@QQ.COM
ExitApp
}
Gui, Show, Hide,E-Mail-595076941@QQ.COM
#Persistent
; #NoTrayIcon
DetectHiddenWindows,On
SetTitleMatchMode,2
; 启动7z安装程序
SetTimer,SetupTimer,500
return
SetupTimer()
{
; 1、如果程序没有运行则运行程序
Process,Exist,Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe
if (%ErrorLevel%=0)
{
IfExist,%A_ScriptDir%\Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe
{
Run,%A_ScriptDir%\Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe
}
else
{
MsgBox,找不到文件 %A_ScriptDir%\Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe
return
}
}
IfWinNotExist,安装向导 - Delphi 7 Lite Full Edition,正在你的计算机中安装 Delphi 7 Lite Full Edition,请稍等...
{
ControlSend, TNewButton1,{Space}, 选择安装语言 ahk_class TSelectLanguageForm ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp, 取消
ControlSend, Button1,{Space}, 安装向导 ahk_class #32770 ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp, 本程序为Window
ControlSend, TNewButton1,!n, 安装向导 - Delphi 7 Lite Full Edition ahk_class TWizardForm ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp, 取消
ControlSend, TNewButton1,!i, 安装向导 - Delphi 7 Lite Full Edition ahk_class TWizardForm ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp, 取消
}
IfWinExist,安装向导 - Delphi 7 Lite Full Edition ahk_class TWizardForm,安装向导已完成 Delphi 7 Lite Full Edition 的安装
{
SetTimer,SetupTimer,Delete
ControlClick, TNewButton5, 安装向导 - Delphi 7 Lite Full Edition ahk_class TWizardForm ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp,安装向导已完成 Delphi 7 Lite Full Edition 的安装
MsgBox,,,已成功安装Delphi7Lite编程软件,2
ExitApp
}
}
; ----- End -----
*/
666666