无人值守全自动静默安装AutoHotkey和SciTE4AutoHotkey-2021年11月25日

无人值守全自动静默安装AutoHotkey和SciTE4AutoHotkey-2021年11月25日

一、用WinRAR 6.02把所有文件都压缩打包成一个可执行自解压压缩包程序软件

;下面的注释包含自解压脚本命令

Path=D:\
Setup=D:\TotalCMD\runtc.exe
Setup=D:\TotalCMD\Setup\Maye\Maye.exe
Setup=wscript.exe //e:vbscript D:\TotalCMD\Tools\AutoHotkey\_SilentInstallAutoHotkey.vbs
Silent=2
Overwrite=2

二、由于用AutoHotkey的Hotkey设置的热键必需在任务栏或者电脑桌面激活时才有效

由于用AutoHotkey的Hotkey设置的热键偶尔会失效失灵不起作用,所以我用 Maye 设置

Total Commander 的热键为 F8

https://blog.arae.cc/post/25830.html

https://www.lanzoux.com/b0bqwqjvg

https://github.com/25H/Maya/releases/latest

D:\TotalCMD\runtc.ahk

;~ 由于AutoHotkey的Hotkey语句设置的热键必需在任务栏或者桌面进程激活时才有效,
;~ 所以请使用Maye来设置Total Commander的热键 F8

;~  --------------------------------------------------------
;~ 设置激活或者隐藏 Total Commander 10.00 主窗口的快捷键为 F8
;~ 2021年11月23日
;~  --------------------------------------------------------
;~ 由于AutoHotkey的Hotkey语句设置的热键必需在任务栏或者桌面进程激活时才有效,
;~ 所以请使用Maye来设置Total Commander的热键 F8
;~ https://blog.arae.cc/post/25830.html
;~ https://github.com/25H/Maya/releases/
;~ 可以用 Total Commander 访问用RaiDrive异地远程连接群晖WebDAV文件服务并映射成的本地虚拟磁盘盘符 Z: 分区
;~ 可以用 Total Commander 访问用NetDrive2异地远程连接群晖SFTP文件服务并映射成的本地虚拟磁盘盘符 Y: 分区
;~ 可以用支持 Total Commander的WebDAV文件服务访问插件异地远程连接群晖WebDAV文件服务中的网络共享文件夹
;~ 可以用KeePass或者KeePass2Android来连接坚果云或者
;~ 群晖NAS的WebDAV文件服务来管理网址、用户名、账号、密码、口令、暗号、纪念日等个人敏感隐私信息和数据
;~ 可以用腾讯文档的电脑客户端来新建在线文档和在线表格来进行办公文档和办公表格的分享和协作
;~ 可以用Bulk Rename Utility 2.7.1.2来批量重命名或者编号群晖WebDAV文件服务中的共享文件夹中的大量文件
;~ 可以用Double Killer Pro V 2.1.0.104来批量删除群晖WebDAV文件服务中的共享文件夹中的重复文件
;~ 可以用OneKey Ghost V 14.5.8.215来备份保护Windows操作系统和电脑中应用程序软件和设置到GHO镜像文件,
;~ 以便今后用杏雨梨云启动维护系统可启动固态U盘来恢复电脑系统应用程序软件GHO镜像文件到电脑的系统分区C盘
;~ 可以用Shadow Defender 影子卫士来保护Windows操作系统和电脑中应用程序软件的设置,防止电脑软件设置被未授权的更改
;~  --------------------------------------------------------
#SingleInstance,force
loop,3
{
	DetectHiddenWindows,On
	Sleep,3
	IfWinExist,QQ595076941_AutoAHKRun
		ExitApp
}
Gui, Show, Hide,QQ595076941_AutoAHKRun
#Persistent
;~ #NoTrayIcon
DetectHiddenWindows,On
SetTitleMatchMode,2
;~ 设置激活或者隐藏 Total Commander 10.00 主窗口的快捷键为 F8
;~ Hotkey,F8,ActivateOrHideWindowHotkey
ActivateOrHideWindowHotkey()
return
;~  --------------------------------------------------------
ActivateOrHideWindowHotkey()
{
	;~ MsgBox,PressedHotkey检测到已经按下快捷键
	TCTitle:="Total Commander"
	Sleep,5
	WinGetActiveTitle,Title
	IfInString,Title,%TCTitle%
	{
		;~ MsgBox,MinimizeWindow最小化指定窗口
		WinMinimize,Total Commander ahk_class TTOTAL_CMD
		ExitApp
	}
	else
	{
		;~ MsgBox,ActivateWindow显示并且最大化并且激活指定窗口
		SetTimer,ActivateWindowTimer,500
	}
}
;~  --------------------------------------------------------
;根据窗口类名显示并激活Total Commander窗口
ActivateWindowTimer()
{
	;~ 1、如果程序没有运行则运行程序,这里我把可执行文件名改成了TotalCMD-v10.exe
	Process,Exist,TotalCMD-v10.exe
	if (%ErrorLevel%=0)
	{
		IfExist,D:\TotalCMD\TotalCMD-v10.exe
		{
			Run,D:\TotalCMD\TotalCMD-v10.exe
		}
		else
		{
			MsgBox,找不到文件 D:\TotalCMD\TotalCMD-v10.exe
			return
		}
	}
	;~ 2、显示并激活(切换到)指定窗口
	WinShow,Total Commander ahk_class TTOTAL_CMD
	WinActivate,Total Commander ahk_class TTOTAL_CMD
	WinMaximize,Total Commander ahk_class TTOTAL_CMD
	Sleep,5
	WinGet, WinID, ID,Total Commander ahk_class TTOTAL_CMD
	DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
	;~ 3、检查指定窗口是否激活成功,
	;~ 假如激活成功则退出Timer计时器循环执行,
	;~ 如果激活失败则继续尝试激活指定窗口
	TCTitle:="Total Commander"
	Sleep,5
	WinGetActiveTitle,Title
	IfInString,Title,%TCTitle%
	{
		SetTimer,ActivateWindowTimer,Delete
		ExitApp
	}
}
;~  --------------------------------------------------------
/*
; 请使用 窗口信息工具 AHKInfo 1.3.5 获取窗口的类名
;根据窗口类名激活或者隐藏窗口
ActivateOrHideWindow(VarExeFileName:="TotalCMD-v10",VarWinClassName:="TTOTAL_CMD")
{
; 1、如果程序没有运行则运行程序
Process,Exist,%VarExeFileName%.exe
if (%ErrorLevel%=0)
{
IfExist,%VarExeFileName%.exe
{
Run,%VarExeFileName%.exe
return
}
else
{
MsgBox,找不到文件 %VarExeFileName%.exe
return
}
}
; 2、如果窗口未置顶则显示并激活(切换到)指定窗口
IfWinNotActive,ahk_class %VarWinClassName%
{
loop,2
{
Sleep,50
WinShow,ahk_class %VarWinClassName%
;~ WinMaximize,ahk_class %VarWinClassName%
Sleep,50
WinGet, WinID, ID,ahk_class %VarWinClassName%
Sleep,50
DllCall("SwitchToThisWindow", "UInt", WinID, "UInt", 1)
}
return
}
; 3、如果窗口已经显示并置顶则隐藏窗口
;~ WinMinimize,ahk_class %VarWinClassName%
WinHide,ahk_class %VarWinClassName%
}
*/

三、无人值守全自动静默安装AutoHotkey和SciTE4AutoHotkey的脚本如下

D:\TotalCMD\Tools\AutoHotkey\_SilentInstallAutoHotkey.VBS

on error resume next
set y=getobject("winmgmts:\\.\root\cimv2")
set ws=createobject("wscript.shell")
set x=y.execquery("select * from win32_process where name='tdxw.exe'") 
Set objShell = Wscript.createobject("wscript.shell")
for each i in x
     wscript.quit
next
objShell.Run "D:/TotalCMD/Tools/AutoHotkey/AutoHotkey_1.1.33.10_setup.exe  /S /A32 /U32 /U64 /D=D:/TotalCMD/Tools/AutoHotkey/"
wscript.sleep 1000
objShell.Run "D:/TotalCMD/Tools/AutoHotkey/RightMenuSetup.exe"

把AutoHotkey脚本文件的右键菜单翻译成简体中文鼠标右键菜单

D:\TotalCMD\Tools\AutoHotkey\RightMenuSetup.ahk

/*
AutoHotkey 版本: 1.x
操作系统:    WinXP
作者:        甲壳虫<jdchenjian@gmail.com>
博客:        http://hi.baidu.com/jdchenjian
脚本说明:   此工具用来修改 AutoHotkey 脚本的右键菜单关联,适用于 AutoHotkey 安装版、绿色版。
脚本版本:   2009-01-21

修改作者:	兔子
更新说明:
2010.01.09	之前某个时间,修改AHK路径、编辑器路径、编译器路径,默认全部在当前目录下寻找
2010.01.09	去掉默认在新建菜单的勾
2010.06.21	如果SCITE为默认编辑器,则复制个人配置文件“SciTEUser.properties”到%USERPROFILE%
2010.06.25	修正因#NoEnv使%USERPROFILE%变量直接引用无效
2016.04.18	删除“2010.06.21”的改动
*/

; --- 20190207 晓亮修改 ---
#NoEnv
SetWorkingDir, %A_ScriptDir%

; 管理员权限运行
RunWith("admin")


#NoEnv
#SingleInstance, force
SendMode Input
SetWorkingDir %A_ScriptDir%

; 版本(仅用于显示)
Script_Version=v1.0.3.2

; AutoHotkey 原版的相关信息写在注册表HKCR主键中,
; 尝试是当前用户否有权操作该键,如果无权操作HKCR键(受限用户),
; 可通过操作注册表HKCU键来实现仅当前用户关联AHK脚本。
IsLimitedUser:=0
RegWrite, REG_SZ, HKCR, .test
if ErrorLevel
	IsLimitedUser:=1
RegDelete, HKCR, .test
if ErrorLevel
	IsLimitedUser:=1

if IsLimitedUser=0 ; 非受限用户操作HKCR键
{
	RootKey=HKCR
	Subkey=
}
else ; 受限用户操作HKCU键
{
	RootKey=HKCU
	Subkey=Software\Classes\ ; <-- 为简化后面的脚本,此子键须以“\”结尾
}

; 检查是否存在AHK注册表项
RegRead, FileType, %RootKey%, %Subkey%.ahk
if FileType<>
{
	RegRead, value, %RootKey%, %Subkey%%FileType%\Shell\Open\Command ;AHK路径
	AHK_Path:=PathGetPath(value)
	RegRead, value, %RootKey%, %Subkey%%FileType%\Shell\Edit\Command ;编辑器路径
	Editor_Path:=PathGetPath(value)
	RegRead, value, %RootKey%, %Subkey%%FileType%\Shell\Compile\Command ;编译器路径
	Compiler_Path:=PathGetPath(value)
	RegRead, Template_Name, %RootKey%, %Subkey%.ahk\ShellNew, FileName ;模板文件名
}
else
	FileType=AutoHotkeyScript

if AHK_Path=
{
	IfExist, %A_ScriptDir%\AutoHotkey.exe
		AHK_path=%A_ScriptDir%\AutoHotkey.exe
}

if Editor_Path=
{
	IfExist, %A_ScriptDir%\SciTE\SciTE.exe
		Editor_Path=%A_ScriptDir%\SciTE\SciTE.exe
}

if Compiler_Path=
{
	IfExist, %A_ScriptDir%\Compiler\Ahk2Exe.exe
		Compiler_Path=%A_ScriptDir%\Compiler\Ahk2Exe.exe
}

if Template_Name=
	Template_Name=Template.ahk

; --- 20190207 晓亮修改 ---
;设置AHK默认文件夹为  D:\TotalCMD\Tools\AutoHotkey
AHK_path=D:\TotalCMD\Tools\AutoHotkey\AutoHotkeyU32.exe
Editor_Path=D:\TotalCMD\Tools\AutoHotkey\SciTE\SciTE.exe
Compiler_Path=D:\TotalCMD\Tools\AutoHotkey\Compiler\Ahk2Exe.exe

Gui, Add, Tab, x10 y10 w480 h250 Choose1, 设置|说明
	Gui, Tab, 1
		Gui, Add, GroupBox, x20 y40 w460 h50 , “运行脚本”关联的 AutoHotkey
		Gui, Add, Edit, x35 y60 w340 h20 vAHK_Path, %AHK_path%
		Gui, Add, Button, x385 y60 w40 h20 gFind_AHK, 浏览

		Gui, Add, GroupBox, x20 y100 w460 h50 , “编辑脚本”关联的编辑器
		Gui, Add, Edit, x35 y120 w340 h20 vEditor_Path, %Editor_Path%
		Gui, Add, Button, x385 y120 w40 h20 gChoose_Editor, 浏览
		Gui, Add, Button, x430 y120 w40 h20 gDefault_Editor, 默认

		Gui, Add, GroupBox, x20 y160 w460 h50 , “编译脚本”关联的编译器
		Gui, Add, Edit, x35 y180 w340 h20 vCompiler_Path, %Compiler_Path%
		Gui, Add, Button, x385 y180 w40 h20 gChoose_Compiler, 浏览
		Gui, Add, Button, x430 y180 w40 h20 gDefault_Compiler, 默认

		Gui, Add, Checkbox, x35 y230 w270 h20 gNew_Script vNew_Script, 右键“新建”菜单中增加“AutoHotkey 脚本”
		Gui, Add, Button, x310 y230 w80 h20 vEdit_Template gEdit_Template, 编辑脚本模板
		Gui, Add, Button, x400 y230 w80 h20 vDelete_Template gDelete_Template, 删除脚本模板

	Gui, Tab, 2
		Gui, Font, bold
		Gui, Add, Text,, AutoHotkey 脚本关联工具  ScriptSetting %Script_Version%
		Gui, Font
		Gui, Font, CBlue underline
		Gui, Add, Text, gWebsite, 作者:甲壳虫 <jdchenjian@gmail.com>`n`n博客:http://hi.baidu.com/jdchenjian
		Gui, Font
		Gui, Add, Text, w450, 此工具用来修改 AutoHotkey 脚本的右键菜单关联,适用于 AutoHotkey 安装版、绿色版。
		Gui, Add, Text, w450, 您可以用它来修改默认脚本编辑器、编译器,修改默认的新建脚本模板。设置后,在右键菜单中添加“运行脚本”、“编辑脚本”、“编译脚本”和“新建 AutoHotkey 脚本”等选项。
		Gui, Add, Text, w450, 要取消脚本的系统关联,请按“卸载”。注意:卸载后您将无法通过双击来运行脚本,也不能通过右键菜单来启动脚本编辑器...

Gui, Tab
Gui, Add, Button, x100 y270 w60 h20 Default gInstall, 设置
Gui, Add, Button, x200 y270 w60 h20 gUninstall, 卸载
Gui, Add, Button, x300 y270 w60 h20 gCancel, 取消

Gui, Show, x250 y200 h300 w500 CEnter, ScriptSetting %Script_Version%
GuiControl, Disable, Edit_Template ; 使“编辑脚本模板”按钮无效
IfNotExist, %A_WinDir%\ShellNew\%Template_Name%
	GuiControl, Disable, Delete_Template ; 使“删除脚本模板”按钮无效

; 当鼠标指向链接时,指针变成手形
hCurs:=DllCall("LoadCursor","UInt",NULL,"Int",32649,"UInt") ;IDC_HAND
OnMessage(0x200,"WM_MOUSEMOVE")

; --- 20190207 晓亮修改 ---
goto,Install
return

; 改变鼠标指针为手形
WM_MOUSEMOVE(wParam,lParam)
{
	global hCurs
	MouseGetPos,,,,ctrl
	if ctrl in static2
		DllCall("SetCursor","UInt",hCurs)
	return
}
return

GuiClose:
GuiEscape:
Cancel:
	ExitApp

	; 查找 AutoHotkey 主程序
Find_AHK:
	Gui +OwnDialogs
	FileSelectFile, AHK_Path, 3, , 查找 AutoHotkey.exe, AutoHotkey.exe
	if AHK_Path<>
		GuiControl,,AHK_Path, %AHK_Path%
	gosub Default_Compiler
return

; 选择脚本编辑器
Choose_Editor:
	Gui +OwnDialogs
	FileSelectFile, Editor_Path, 3, , 选择脚本编辑器, 程序(*.exe)
	if Editor_Path<>
		GuiControl,,Editor_Path, %Editor_Path%
return

; 默认脚本编辑器
Default_Editor:
	IfExist, %A_ScriptDir%\SciTE\SciTE.exe
		Editor_Path=%A_ScriptDir%\SciTE\SciTE.exe
	else ifExist, %A_WinDir%\system32\notepad.exe
			Editor_Path=%A_WinDir%\system32\notepad.exe
	GuiControl,, Editor_Path, %Editor_Path%
return

; 选择脚本编译器
Choose_Compiler:
	Gui +OwnDialogs
	FileSelectFile, Compiler_Path, 3, , 选择脚本编译器, 程序(*.exe)
	if Compiler_Path<>
		GuiControl,,Compiler_Path, %Compiler_Path%
return

; 默认脚本编译器
Default_Compiler:
	GuiControlGet, AHK_Path
	SplitPath, AHK_Path, ,AHK_Dir
	IfExist, %AHK_Dir%\Compiler\Ahk2Exe.exe
	{
		Compiler_Path=%AHK_Dir%\Compiler\Ahk2Exe.exe
		GuiControl,, Compiler_Path, %Compiler_Path%
	}
return

; 设置
Install:
	Gui, Submit
	IfNotExist, %AHK_Path%
	{
		MsgBox, 16, ScriptSetting %Script_Version%, AutoHotkey 路径错误 !
		return
	}

	IfNotExist, %Editor_Path%
	{
		MsgBox, 16, ScriptSetting %Script_Version%, 编辑器路径错误 !
		return
	}

	IfNotExist, %Compiler_Path%
	{
		MsgBox, 16, ScriptSetting %Script_Version%, 编译器路径错误 !
		return
	}

	; 写入注册表
	RegWrite, REG_SZ, %RootKey%, %Subkey%.ahk,, %FileType%
	if New_Script=1
	{
		RegWrite, REG_SZ, %RootKey%, %Subkey%.ahk\ShellNew, FileName, %Template_Name%
		IfNotExist, %A_WinDir%\ShellNew\%Template_Name%
			gosub Create_Template
	}
	else
	{
		; --- 20190207 晓亮修改 ---
		; --- 此处不要删除右键新建ahk文件的菜单所以注释掉此代码
		;RegDelete, %RootKey%, %Subkey%.ahk\ShellNew
		IfExist, %A_WinDir%\ShellNew\%Template_Name%
			gosub Delete_Template
	}

	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%,, AutoHotkey 脚本
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\DefaultIcon,, %AHK_Path%`,1
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell,, Open
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Open,, 运行脚本
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Open\Command,, "%AHK_Path%" "`%1" `%*
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Edit,, 编辑脚本
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Edit\Command,, "%Editor_Path%" "`%1"
	RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile,, 编译脚本
	IfInString, Compiler_Path, Ahk2Exe.exe
		RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile\Command,, "%Compiler_Path%" /in "`%1"
	else
		RegWrite, REG_SZ, %RootKey%, %Subkey%%FileType%\Shell\Compile\Command,, "%Compiler_Path%" "`%1"

/*		新版的scite不需要将“SciTEUser.properties”放在“USERPROFILE”目录下了
if Editor_Path=%A_ScriptDir%\SciTE\SciTE.exe
{
EnvGet,USERPROFILE,USERPROFILE
FileCopy,%A_ScriptDir%\SciTE\SciTEUser.properties,%USERPROFILE%\SciTEUser.properties,1
}
*/

	;MsgBox, 64, ScriptSetting %Script_Version%, 设置完毕 !
	ExitApp

	; 卸载
Uninstall:
	; --- 20190207 晓亮修改 ---
	;MsgBox, 36, ScriptSetting %Script_Version%
	;, 注意:卸载后您将无法通过双击来运行脚本,也不能通过右键菜单来启动脚本编辑器...`n`n确定要取消 AHK 脚本的系统关联吗 ?
	;IfMsgBox, Yes
	;{
	;RegDelete, %RootKey%, %Subkey%.ahk
	;RegDelete, %RootKey%, %Subkey%%FileType%
	;gosub Delete_Template
	;ExitApp
	;}
return

; 编辑脚本模板
Edit_Template:
	GuiControlGet, Editor_Path
	IfNotExist, %Editor_Path%
	{
		MsgBox, 64, ScriptSetting %Script_Version%, 脚本编辑器路径错误 !
		return
	}
	IfNotExist, %A_WinDir%\ShellNew\%Template_Name%
		gosub Create_Template
	Run, %Editor_Path% %A_WinDir%\ShellNew\%Template_Name%
return

; 使编辑脚本模板按钮有效/无效
New_Script:
	GuiControlGet, New_Script
	if New_Script=0
		GuiControl, Disable, Edit_Template
	else
		GuiControl, Enable, Edit_Template
return

; 新建脚本模板
Create_Template:
	GuiControlGet, AHK_Path
	FileGetVersion, AHK_Ver, %AHK_Path%

	FileAppend,
	(
/*
AutoHotkey 版本: %AHK_Ver%
操作系统:    %A_OSVersion%
作者:        %A_UserName%
网站:        http://www.AutoHotkey.com
脚本说明:
脚本版本:   v1.0
*/

#NoEnv
SendMode Input
SetWorkingDir `%A_ScriptDir`%

	), %A_WinDir%\ShellNew\%Template_Name%

	GuiControl, Enable, Delete_Template ; 使“删除脚本模板”按钮有效
return

; 删除脚本模板
Delete_Template:

	; --- 20190207 晓亮修改 ---
	;MsgBox, 36, ScriptSetting %Script_Version%
	;	, 要删除当前的 AHK 脚本模板吗 ?`n`n脚本模板被删除后,仍可通过本工具重建模板。
	;IfMsgBox, Yes
	;FileDelete, %A_WinDir%\ShellNew\%Template_Name%
	;GuiControl, Disable, Delete_Template ; 使“删除脚本模板”按钮无效
return

; 打开网站
Website:
	Run, http://hi.baidu.com/jdchenjian
return

; 从注册表值字符串中提取路径
PathGetPath(pSourceCmd)
{
	local Path, ArgsStartPos = 0
	if (SubStr(pSourceCmd, 1, 1) = """")
		Path := SubStr(pSourceCmd, 2, InStr(pSourceCmd, """", False, 2) - 2)
	else
	{
		ArgsStartPos := InStr(pSourceCmd, " ")
		if ArgsStartPos
			Path := SubStr(pSourceCmd, 1, ArgsStartPos - 1)
		else
			Path = %pSourceCmd%
	}
	return Path
}






; 强制自身进程以 管理员权限 或 普通权限 或 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
	}
}

四、SciTE的用户工具栏太简陋了,我增添了一些常用工具

D:\TotalCMD\Tools\AutoHotkey\SciTE\user\UserToolbar.properties

; SciTE4AutoHotkey toolbar user settings file
;
; You are encouraged to edit this file!
;

; Tool definitions are in the following format:
; =Tool Name|Command line|Hotkey (optional)|Icon (optional)
; Paths support the following variables:
; %FILENAME% represents the filename of the current script
; %FILEPATH% represents the path to the current script
; %FULLFILENAME% represents the path and filename of the current script
; %SCITEDIR% represents the directory where SciTE resides
; %USERDIR% represents the user SciTE directory (My Documents\AutoHotkey\SciTE)
; %PLATFORM% represents the active platform
; %LOCALAHK% is the path of SciTE4AutoHotkey's internal copy of AutoHotkey.exe
; %AUTOHOTKEY% is the path of AutoHotkey.exe
; %ICONRES% is the toolbar icon library
; Use - or -- to add separators.

; Place here your tools

; Place here your scriptlets (required by the Scriptlet Utility)

--
=代码格式化 (Auto-Syntax-Tidy) (Ctrl+4)|%LOCALAHK% tools\Auto-Syntax-Tidy\Auto-Syntax-Tidy_v12.ahk|^4
--
=窗口信息(ahkinfo)|%SCITEDIR%\tools\ahkinfo\ahkinfo.exe||%ICONRES%,9
=窗口信息(ViewWizard)|%SCITEDIR%\tools\ViewWizard\ViewWizard.exe||%SCITEDIR%\tools\ViewWizard\ViewWizard.ico
=窗口信息(WindowSpy)|%SCITEDIR%\tools\WindowSpy\WindowSpy.ahk||%ICONRES%,9
=窗口信息工具 (AHK_Window_Info) (Ctrl+6)|%SCITEDIR%\..\AutoHotkeyU32.exe tools\AHK_Window_Info\AHK_Window_Info_v1.7.ahk|^6|%ICONRES%,9
=窗口信息(Spy++)|%SCITEDIR%\tools\Spy++\Spyxx.exe||%ICONRES%,9
=系统信息(CLISD)|%SCITEDIR%\tools\CLISD\CLISD.exe||%ICONRES%,9
=颜色信息(ColorFinder)|%SCITEDIR%\tools\ColorFinder\ColorFinder.ahk||%ICONRES%,9

--
=宏录制(MacroCreator)(Ctrl+1)|%SCITEDIR%\tools\MacroCreator\MacroCreator.exe|^1|%SCITEDIR%\tools2\MacroCreator\MacroCreator.ico
=宏录制(Au3Record)|%SCITEDIR%\tools\Au3Record\Au3Record.exe||%SCITEDIR%\tools2\Au3Record\Au3Record.ico
=宏录制(AutoScriptWriter)|%SCITEDIR%\tools\AutoScriptWriter\AutoScriptWriter.exe||%SCITEDIR%\tools2\AutoScriptWriter\AutoScriptWriter.ico
--
=AutoGUI (Ctrl+5)|%LOCALAHK% tools\AutoGUI\AutoGUI.ahk|^5|tools\AutoGUI\Icons\AutoGUI.icl,1
=AHK 正则终结者 (Ctrl+7)|%LOCALAHK% "tools\AHK 正则终结者\AHK 正则终结者.ahk"|^7|
--
=爱码源码仓库(Ctrl+3)|%SCITEDIR%\tools\iCodeRepository3\iCodeRepository3.exe|^3|%SCITEDIR%\tools2\iCodeRepository3\iCodeRepository3.ico
=源码正文搜索(FileLocatorPro)|%SCITEDIR%\tools\FileLocatorPro\FileLocatorPro.exe||%SCITEDIR%\tools2\FileLocatorPro\FileLocatorPro.ico
=提取图标修改资源(eXeScope)|%SCITEDIR%\tools\eXeScope\eXeScope.exe||%SCITEDIR%\tools2\eXeScope\eXeScope.ico

五、其实 AutoAHK v4.2 更加好用一点

无所谓啦,希望AutoAHK可以设置是否启用每次启动时自动检查并修复简体中文鼠标右键菜单的功能,

只要能写出稳定高效智能易用的AutoHotkey脚本程序应用软件的话用什么编辑器和调试器是无所谓的,

只要自己用着习惯,编程效率高就可以了。

我把两个编辑器都打包在一起了,这两个编辑器互相不会冲突的,想用那个就用那个,随便。

 

我的腾讯QQ电子邮箱地址是   595076941@qq.com  

给TA买糖
共{{data.count}}人
人已赞赏
其他

设置激活或者隐藏 Total Commander 10.00 主窗口的快捷键为 F8

2021-11-24 11:10:11

AHKV1其他办公

【AHK学习记录】选中文件复制/移动,放入“备份”文件夹

2021-11-26 13:25:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索