AHK代码测试助手 2022年1月18日
;
;
;
AHK代码测试助手 2022年1月18日
;
; /*
; ======================================================================
;
; 标题 := "AHK代码测试助手"
; 下载网址 := ""
; 项目主页 := "https://gitee.com/ds920/"
; 文件名 := "D:\Program\AHK\TestAHK\TestAHK.ahk"
; 文件序号 := "001"
; 写作日期 := "2022年1月18日"
; 更新版本号 := ""
; 此脚本作者 := "ds920"
; 作者邮箱 := "595076941@qq.com"
; 用法 := "(提示:需要已安装Windows7或更高版本操作系统的电脑)"
; 第1步 := ""
; 第2步 := ""
; 第3步 := ""
;
; 未解决的问题 := "此AHK脚本所在的文件夹路径中不能含有空格符号"
;
; ======================================================================
; */
; ----------------------------------------------------------------------
#SingleInstance, force
#Persistent
#NoEnv
RunWith("admin")
DetectHiddenWindows,On
SetTitleMatchMode,2
SendMode Input
SetWorkingDir %A_ScriptDir%
; ----------------------------------------------------------------------
global TempletAHK
global TempTime
global TestAHK
TempletAHK=D:\Program\AHK\TestAHK\Templet.ahk
Hotkey,F4,NewAHK
ToolTip,请按快捷键 F4 来编辑临时AHK测试文件
SetTimer, RemoveToolTip, -8000
Hotkey,F6,TestAHK
FileCreateDir,D:\Program\AHK\TestAHK\Test
return
; ----------------------------------------------------------------------
NewAHK()
{
TempTime=%A_YYYY%%A_MM%%A_DD%_%A_Hour%%A_Min%%A_Sec%
TestAHK=D:\Program\AHK\TestAHK\Test\TestAHK-%TempTime%.ahk
FileCopy,%TempletAHK%,%TestAHK%,0
SetWorkingDir,D:\Program\AutoHotkey\SciTE\中文帮助
Run,D:\Program\AutoHotkey\SciTE\SciTE.exe %TestAHK%
ToolTip,请保存AHK脚本文件后按快捷键 F6 来测试AHK脚本文件
SetTimer, RemoveToolTip, -8000
}
;
TestAHK()
{
ToolTip,第%TempTime%号测试
SetTimer, RemoveToolTip, -8000
Run,%TestAHK%
}
;
RemoveToolTip:
ToolTip
return
; ----------------------------------------------------------------------
; 非常感谢 空 分享了 RunWith() 这个非常好用的神奇函数
; 这个 RunWith() 函数解决了长期困扰我的以管理员身份运行脚本的一个权限管理难题
;
/*
RunWith —— 强制以管理员权限、普通权限、ANSI、U32、U64 运行自身。
其他
21年4月8日
4
1.7k
官方帮助里有一段管理员权限运行自身的代码,但是那段代码有4个问题。
1是不能指定ahk版本。
2是不能降权运行(管理员权限降为普通权限)。
3是会丢失传入的参数。
4是每次复制粘贴一遍代码很烦。
本函数解决了以上4个问题。
使用方法:
将以下代码保存为文件“RunWith.ahk”。
放入本地库、用户库、标准库其中任意一个里(例如 “X:\我的电脑\Documents\AutoHotkey\Lib”)。
测试代码:(使用 Unicode32 版本并以管理员权限运行自身)
#Include A_ScriptDir\Include\RunWith.ahk
RunWith("admin",32)
当前AHK版本 := (!A_IsUnicode) ? "ANSI" : (A_PtrSize=4) ? "Unicode 32" : "Unicode 64"
当前权限 := (A_IsAdmin=1) ? "管理员权限" : "普通权限"
MsgBox, % "当前AHK版本: " 当前AHK版本 "`n`n当前权限: " 当前权限
*/
; 强制自身进程以 管理员权限 或 普通权限 或 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
}
}
; ----------------------------------------------------------------------
; ===== 此脚本结束 =====================================================
;
#SingleInstance, force
DetectHiddenWindows,On
SetTitleMatchMode,2
RunWith("admin")
; 1、把要测试的代码复制到下面,2、保存此脚本文件,3、按快捷键 F6 运行此脚本
; ======================================================================
; ======================================================================
ToolTip,% A_ScriptFullPath,333,333
MsgBox,,,% A_AhkPath,3
ExitApp
; ======================================================================
; ======================================================================
;
;
;
;
;
;
;
;
;
;
; /*
; ======================================================================
;
; 标题 := "AHK代码测试助手-测试代码的模板"
; 下载网址 := ""
; 项目主页 := "https://gitee.com/ds920/"
; 文件名 := "D:\Program\AHK\TestAHK\Templet.ahk"
; 文件序号 := "002"
; 写作日期 := "2022年1月18日"
; 更新版本号 := ""
; 此脚本作者 := "ds920"
; 作者邮箱 := "595076941@qq.com"
; 用法 := "(提示:需要已安装Windows7或更高版本操作系统的电脑)"
; 第1步 := ""
; 第2步 := ""
; 第3步 := ""
;
; 未解决的问题 := "此AHK脚本所在的文件夹路径中不能含有空格符号"
;
; ======================================================================
; */
; ----------------------------------------------------------------------
#Persistent
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
;
; 非常感谢 空 分享了 RunWith() 这个非常好用的神奇函数
; 这个 RunWith() 函数解决了长期困扰我的以管理员身份运行脚本的一个权限管理难题
;
/*
RunWith —— 强制以管理员权限、普通权限、ANSI、U32、U64 运行自身。
其他
21年4月8日
4
1.7k
官方帮助里有一段管理员权限运行自身的代码,但是那段代码有4个问题。
1是不能指定ahk版本。
2是不能降权运行(管理员权限降为普通权限)。
3是会丢失传入的参数。
4是每次复制粘贴一遍代码很烦。
本函数解决了以上4个问题。
使用方法:
将以下代码保存为文件“RunWith.ahk”。
放入本地库、用户库、标准库其中任意一个里(例如 “X:\我的电脑\Documents\AutoHotkey\Lib”)。
测试代码:(使用 Unicode32 版本并以管理员权限运行自身)
#Include A_ScriptDir\Include\RunWith.ahk
RunWith("admin",32)
当前AHK版本 := (!A_IsUnicode) ? "ANSI" : (A_PtrSize=4) ? "Unicode 32" : "Unicode 64"
当前权限 := (A_IsAdmin=1) ? "管理员权限" : "普通权限"
MsgBox, % "当前AHK版本: " 当前AHK版本 "`n`n当前权限: " 当前权限
*/
; 强制自身进程以 管理员权限 或 普通权限 或 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
}
}
;
;
;
;
;
1 ; 2 ; 3 ; AutoHotkey代码测试助手 4 ; 2022年1月15日 5 ; By ds920 6 ; 7 ; 用法: 8 ; 第1步:运行此脚本 9 ; 第2步:在SciTE4AutoHotkey窗口中选中需要测试的代码 10 ; 第3步:按快捷键F4,此脚本会将选中的代码复制到新的独立的待测试脚本文件中 11 ; 第4步:调整被测试相关窗口的位置和大小 12 ; 第5步:按快捷键F6,开始测试选中的代码, 13 ; 由于选中的代码通常只有一行或者几行, 14 ; 测试代码很少具有针对性, 15 ; 不易混淆,提高了测试效果和效率. 16 ; 17 ; 专注于测试一行或者少量的几行代码更容易测试成功并且得到正确的代码语句 18 ; 19 ; 源代码下载网址: 20 ; https://gitee.com/ds920/CodeTestHelper 21 ; https://www.cnblogs.com/delphixx/p/15806255.html 22 ; 23 ; 设置环境变量 24 #SingleInstance,force 25 #Persistent 26 #NoEnv 27 #WinActivateForce 28 ;~ #NoTrayIcon 29 ;~ #Warn 30 SetWorkingDir,%A_ScriptDir% 31 DetectHiddenWindows,On 32 SetTitleMatchMode,2 33 ; 34 ; 设置变量 35 global SciTE_Path 36 SciTE_Path:="D:\Program\AutoHotkey\SciTE" 37 global TestAHK_Name 38 global TestAHK_FullPath 39 ; 40 ; 创建热键 41 Hotkey,F4,HotkeyF4 42 Hotkey,F6,HotkeyF6 43 ToolTip,请选中需要测试的AHK代码 并按快捷键F4复制代码 44 SetTimer, RemoveToolTip, -8000 45 ; 46 return 47 ; 48 HotkeyF4() 49 { 50 TestAHK_Name=Test_%A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec% 51 TestAHK_FullPath=D:\AHKCode\TestCode\%TestAHK_Name%.ahk 52 Send,^c 53 FileCreateDir,D:\AHKCode\TestCode 54 FileAppend, ; 这里需要逗号. 55 ( 56 #SingleInstance,force 57 #Persistent 58 #NoEnv 59 #WinActivateForce 60 ;~ #NoTrayIcon 61 ;~ #Warn 62 SetWorkingDir,%A_ScriptDir% 63 DetectHiddenWindows,On 64 SetTitleMatchMode,2 65 ; 66 ), %TestAHK_FullPath% 67 ; MsgBox,%TestAHK_FullPath% 68 Run,%SciTE_Path%\SciTE.exe %TestAHK_FullPath% 69 Sleep,1000 70 Send,^{End} 71 Sleep,200 72 Send,{Enter 2} 73 Sleep,500 74 Send,^v 75 ToolTip,保存脚本之后 按快捷键F6开始测试 76 SetTimer, RemoveToolTip, -8000 77 } 78 ; 79 HotkeyF6() 80 { 81 ToolTip,测试编号:%TestAHK_Name% 82 ; Send,^s 83 Run,%TestAHK_FullPath% 84 SetTimer, RemoveToolTip, -8000 85 } 86 ; 87 RemoveToolTip: 88 ToolTip 89 return 90 ; 91 ; MsgBox,Msg123 92 ; 93 94 ; 我会在空余时间用微软的 Visual Studio 2015 简体中文版中的 C++ 语言 和 95 ; 简体中文汉化版 Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite.v17.0 中的Pascal 语言 96 ; 重新制作,重构,优化,测试,改进,分享,发布此"代码测试工具" 97 ; 98 ; 使得此"代码测试工具"能够辅助 AutoHotkey,AutoIT, 99 ; C++(Visual Studio 2015 简体中文版),Pascal(Embarcadero.Delphi.11.0简体中文汉化版), 100 ; Python,JAVA 和 C# 的代码编程制作开发科学研究测试部署. 101 102 ; 常见的窗口PSY嗅探检测工具有: 103 ; 001-星雨朝霞的AHKInfo 1.3.5 104 ; 002-FindText()8.6- 屏幕抓字生成字库工具与找字函数——FeiYue 105 ; 003-ViewWinzard 2.63 106 ; 004-WindowSpy 107 ; 005-AHK_Window_Info 108 ; 006-Spy++ 109 ; 007-MacroCreator 110 ; 008-AU3Record 111 ; 009-AutoScriptWrite 112 ; 010-PuloversMacroCreator 113 114 /* 115 ; 我常用的SetTimer循环操作代码结构 116 ; ----- 1 ----- 117 #SingleInstance,Ignore 118 #Persistent 119 runwith("admin") 120 loop,5 121 { 122 DetectHiddenWindows,On 123 Sleep,5 124 IfWinExist,7z-E-Mail-595076941@QQ.COM 125 ExitApp 126 } 127 Gui, Show, Hide,7z-E-Mail-595076941@QQ.COM 128 DetectHiddenWindows,On 129 SetTitleMatchMode,2 130 ; 启动7z安装程序 131 SetTimer,SetupTimer,500 132 return 133 SetupTimer() 134 { 135 ; 1、如果程序没有运行则运行程序 136 Process,Exist,7z2106.exe 137 if (%ErrorLevel%=0) 138 { 139 IfExist,%A_ScriptDir%\7z2106.exe 140 { 141 Run,%A_ScriptDir%\7z2106.exe 142 } 143 else 144 { 145 MsgBox,找不到文件 %A_ScriptDir%\7z2106.exe 146 return 147 } 148 } 149 ControlSend, Button2,{Space}, 7-Zip 21.06 Setup ahk_class #32770 ahk_exe 7z2106.exe, Cancel 150 Sleep,2000 151 IfWinExist,7-Zip,installed 152 { 153 SetTimer,SetupTimer,Delete 154 ControlSend, Button2,{Space}, 7-Zip 21.06 Setup ahk_class #32770 ahk_exe 7z2106.exe, Cancel 155 MsgBox,,,已成功安装7-Zip软件,2 156 ExitApp 157 } 158 } 159 160 161 ; 非常感谢 RunWith() 函数作者 空 162 ; 这个 RunWith() 函数解决了我的一大难题 163 ; https://www.autoahk.com/archives/35533 164 ; 强制自身进程以 管理员权限 或 普通权限 或 ANSI 或 U32 或 U64 版本运行。 165 ; 例1: runwith("admin","u32") 强制自身以 u32 + 管理员权限 运行。 166 ; 例2: runwith("","ansi") 强制自身以 ansi 版本运行(权限不变)。 167 ; 例3: runwith("normal") 强制自身以 普通权限 运行(版本不变)。 168 RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default") 169 { 170 ; 格式化预期的模式 171 switch, RunAsAdmin 172 { 173 case "Normal","Standard","No","0": RunAsAdmin:=0 174 case "Admin","Yes","1": RunAsAdmin:=1 175 case "Default": RunAsAdmin:=A_IsAdmin 176 default: RunAsAdmin:=A_IsAdmin 177 } 178 switch, ANSI_U32_U64 179 { 180 case "A32","ANSI","A": ANSI_U32_U64:="AutoHotkeyA32.exe" 181 case "U32","X32","32": ANSI_U32_U64:="AutoHotkeyU32.exe" 182 case "U64","X64","64": ANSI_U32_U64:="AutoHotkeyU64.exe" 183 case "Default": ANSI_U32_U64:="AutoHotkey.exe" 184 default: ANSI_U32_U64:="AutoHotkey.exe" 185 } 186 ; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数) 187 for k, v in A_Args 188 { 189 if (RunAsAdmin=1) 190 { 191 ; 转义所有的引号与转义符号 192 v:=StrReplace(v, "\", "\\") 193 v:=StrReplace(v, """", "\""") 194 ; 无论参数中是否有空格,都给参数两边加上引号 195 ; Run 的内引号是 " 196 ScriptParameters .= (ScriptParameters="") ? """" v """" : A_Space """" v """" 197 } 198 else 199 { 200 ; 转义所有的引号与转义符号 201 ; 注意要转义两次 Run 和 RunAs.exe 202 v:=StrReplace(v, "\", "\\") 203 v:=StrReplace(v, """", "\""") 204 v:=StrReplace(v, "\", "\\") 205 v:=StrReplace(v, """", "\""") 206 ; 无论参数中是否有空格,都给参数两边加上引号 207 ; RunAs.exe 的内引号是 \" 208 ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\""" 209 } 210 } 211 212 ; 判断当前 exe 是什么版本 213 if (!A_IsUnicode) 214 RunningEXE:="AutoHotkeyA32.exe" 215 else if (A_PtrSize=4) 216 RunningEXE:="AutoHotkeyU32.exe" 217 else if (A_PtrSize=8) 218 RunningEXE:="AutoHotkeyU64.exe" 219 220 ; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。 221 if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE)) 222 return 223 ; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。 224 else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)")) 225 { 226 预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限" 227 当前权限:=(A_IsAdmin=1) ? "管理员权限" : "普通权限" 228 ErrorMessage= 229 (LTrim 230 预期使用: %ANSI_U32_U64% 231 当前使用: %RunningEXE% 232 233 预期权限: %预期权限% 234 当前权限: %当前权限% 235 236 程序即将退出。 237 ) 238 MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage% 239 ExitApp 240 } 241 else 242 { 243 ; 获取 AutoHotkey.exe 的路径 244 SplitPath, A_AhkPath, , Dir 245 if (RunAsAdmin=0) 246 { 247 ; 强制普通权限运行 248 switch, A_IsCompiled 249 { 250 ; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。 251 ; 工作目录不用单独指定,默认使用 A_WorkingDir 。 252 case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide 253 default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide 254 } 255 } 256 else 257 { 258 ; 强制管理员权限运行 259 switch, A_IsCompiled 260 { 261 ; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。 262 ; 工作目录不用单独指定,默认使用 A_WorkingDir 。 263 case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters% 264 default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters% 265 } 266 } 267 ExitApp 268 } 269 } 270 271 272 ; -----2----- 273 #SingleInstance,Ignore 274 loop,5 275 { 276 DetectHiddenWindows,On 277 Sleep,5 278 IfWinExist,E-Mail-595076941@QQ.COM 279 ExitApp 280 } 281 Gui, Show, Hide,E-Mail-595076941@QQ.COM 282 #Persistent 283 ; #NoTrayIcon 284 DetectHiddenWindows,On 285 SetTitleMatchMode,2 286 287 ; 启动7z安装程序 288 SetTimer,SetupTimer,500 289 return 290 SetupTimer() 291 { 292 ; 1、如果程序没有运行则运行程序 293 Process,Exist,Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe 294 if (%ErrorLevel%=0) 295 { 296 IfExist,%A_ScriptDir%\Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe 297 { 298 Run,%A_ScriptDir%\Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe 299 } 300 else 301 { 302 MsgBox,找不到文件 %A_ScriptDir%\Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe 303 return 304 } 305 } 306 IfWinNotExist,安装向导 - Delphi 7 Lite Full Edition,正在你的计算机中安装 Delphi 7 Lite Full Edition,请稍等... 307 { 308 ControlSend, TNewButton1,{Space}, 选择安装语言 ahk_class TSelectLanguageForm ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp, 取消 309 ControlSend, Button1,{Space}, 安装向导 ahk_class #32770 ahk_exe Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.tmp, 本程序为Window 310 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, 取消 311 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, 取消 312 } 313 IfWinExist,安装向导 - Delphi 7 Lite Full Edition ahk_class TWizardForm,安装向导已完成 Delphi 7 Lite Full Edition 的安装 314 { 315 SetTimer,SetupTimer,Delete 316 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 的安装 317 MsgBox,,,已成功安装Delphi7Lite编程软件,2 318 ExitApp 319 } 320 } 321 ; ----- End ----- 322 323 324 */
www.cnblogs.com/delphixx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-01-15 电脑桌面与群晖NAS双向实时同步-20210105