595076941@qq.com

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 */
复制代码

 

posted @   QQ595076941  阅读(457)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-01-15 电脑桌面与群晖NAS双向实时同步-20210105
595076941@qq.com
点击右上角即可分享
微信分享提示