一键全自动静默安装并设置FastCopy-ver4.2.0简体中文汉化版-2022年9月12日
压缩包下载网址 : https://ds920.lanzouy.com/itxQ60bm8r6f
一直想制作一个一键全自动静默安装并设置FastCopy的自解压压缩包
首先想到的是分析调试 FastCopy ver4.2.0 的 C++ 源代码,并复制提取源代码中注册系统右键拖放菜单的代码,单独拿出来做一个静默exe可执行文件,用来静默添加系统右键拖放菜单,但是我用Visual-Studio打开源代码之后发现我水平比较差看不懂C++源代码,只好放弃此方法,我认为此方法是最好的方法。希望有会用批处理命令行注册添加右键拖放菜单和删除菜单的朋友能够在本文评论区告诉我一下源代码,谢谢。
然后我有想到用Delphi 7或者“Embarcadero.Delphi.10.4.2.v27.Lite.v16.2.RAD.10.4.2”另外单独制作一个exe可执行文件,用来静默添加系统右键拖放菜单,但是我的编程水平比较差,没有成功
或者,回到AutoHotkey自动化热键脚本上来,制作了一个单文件一键全自动静默安装并设置FastCopy-ver4.2.0简体中文汉化版软件包
; 此脚本从此行开始
;
; 全自动静默安装 FastCopy ver 4.2.0 简体中文汉化版
; 请使用系统总裁出品的:
; 7z压缩包自解压制作工具Fc - SysCeo.Com 来
; 打包FastCopy汉化安装文件和此脚本编译后的exe文件
; 所有文件都解压缩到文件夹 C:\Prog\FastCopy\
; 系统总裁网址 https://www.sysceo.com/
loop,5
{
DetectHiddenWindows,On
Sleep,5
IfWinExist,QQ595076941_FastCopy-ver4-2-0
ExitApp
}
Gui, Show, Hide,QQ595076941_FastCopy-ver4-2-0
#SingleInstance,force
#Persistent
DetectHiddenWindows,On
SetTitleMatchMode,2
; 强制自身以 ansi + 管理员权限 运行。
runwith("admin","ansi")
SetTimer,RunAPP,500
SetTimer,ActiveMainWindow,500
SetTimer,CheckConfigItemAndExitAPP,500
return
; ==========================================
; 运行 FastCopy ver4.2.0
RunAPP()
{
IfWinNotExist,FastCopy ver4.2.0
{
IfExist,C:\Prog\FastCopy\FastCopy.exe
{
Run,C:\Prog\FastCopy\FastCopy.exe
}
}
}
; 激活 FastCopy ver4.2.0 主窗口
; 当存在主要设置子窗口时请不要激活 FastCopy ver4.2.0 主窗口
ActiveMainWindow()
{
IfWinNotExist,主要设置,应用
{
WinActivate,FastCopy ver4.2.0
}
}
CheckConfigItemAndExitAPP()
{
IfWinActive,FastCopy ver4.2.0
{
Sleep,100
Send,!o
Sleep,100
Send,m
Sleep,100
Send,{End}
Sleep,100
Send,{Up}
Sleep,100
Send,{Up}
Sleep,100
}
IfWinActive,主要设置,右键点击菜单
{
Sleep,100
Control, Check, , Button73, 主要设置,右键点击菜单
Sleep,2000
; Send,{Enter}
;点击控件
ControlClick, Button2, 主要设置,右键点击菜单
;点击控件
ControlClick, Button2, 主要设置,右键点击菜单
;点击控件
ControlClick, Button1, 主要设置,右键点击菜单
SetTimer,RunAPP,Delete
SetTimer,ActiveMainWindow,Delete
SetTimer,CheckConfigItemAndExitAPP,Delete
loop,10
{
; WinClose,主要设置,右键点击菜单
WinMinimize,FastCopy ver4.2.0
}
MsgBox,0,设置已成功,FastCopy右键拖放菜单设置已成功,2
ExitApp
}
}
; ==========================================
;
; 强制自身进程以 管理员权限 或 普通权限 或 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
}
}
;
;
; 我的腾讯QQ电子邮箱地址是 595076941@.qqcom
;
; 此脚本到此行结束
目前,在Microsoft Windows XP SP3、Windows 7 Professional、Windows 10 企业版 LTSC、 Microsoft Windows 11、 U盘魔术师v6特别版(USMv6) 等各种系统下测试能够顺利运行此安装包并实现预期功能效果。(一键安装FastCopy软件并设置右键点击菜单、右键拖放菜单、右键粘贴菜单,无需按回车键,无需点击下一步按钮,无需点击确定按钮,无需选择安装目的地文件夹路径,无需手动配置各项设置选项,附带复制过滤器关键字文档,附带批处理命令行操作帮助教程文档,附带其他快速复制辅助文档和应用程序软件)
最后发现,Run,regsvr32.exe /s C:\Prog\FastCopy\FastEx64.dll 可以自动静默的注册系统右键菜单
这个是静默安装 FastCopy-ver4.2.0简体中文汉化版 最完美的解决方案了
; 此脚本从此行开始
;
; 全自动静默安装 FastCopy ver 4.2.0 简体中文汉化版
; 请使用系统总裁出品的:
; 7z压缩包自解压制作工具Fc - SysCeo.Com 来
; 打包FastCopy汉化安装文件和此脚本编译后的exe文件
; 所有文件都解压缩到文件夹 C:\Prog\FastCopy\
; 系统总裁网址 https://www.sysceo.com/
loop,5
{
DetectHiddenWindows,On
Sleep,5
IfWinExist,QQ595076941_FastCopy-ver4-2-0
ExitApp
}
Gui, Show, Hide,QQ595076941_FastCopy-ver4-2-0
#SingleInstance,force
#Persistent
DetectHiddenWindows,On
SetTitleMatchMode,2
; 强制自身以 ansi + 管理员权限 运行。
runwith("admin","ansi")
; 以管理员身份根据系统位数类型注册 FastCopy v4.2.0 简体中文汉化版 的右键菜单
; 使得用户在右键拖放或者右键点击文件或者文件夹时能够显示 FastCopy右键菜单
; 即,"复制"、"移动"、"粘贴"、"删除"等各种FastCopy右键菜单
IfExist,%windir%\SysWOW64
{
Run,regsvr32.exe /s C:\Prog\FastCopy\FastEx64.dll
}
else
{
Run,regsvr32.exe /s C:\Prog\FastCopy\FastExt.dll
}
MsgBox,0,设置已成功,FastCopy右键菜单已设置成功,2
ExitApp
return
; ==========================================
; ==========================================
;
; 强制自身进程以 管理员权限 或 普通权限 或 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
}
}
;
;
; 我的腾讯QQ电子邮箱地址是 595076941@.qqcom
;
; 此脚本到此行结束
当类似于FastCopy静默安装包这样的exe可执行文件收集的比较多之后就可以制作批量安装界面了
MsgBox, 4, , "Whether to install all software in bulk at once ?"`n"是否立即批量安装所有软件?"`n`ncontinue?
IfMsgBox, No
ExitApp
loop,Files,%A_ScriptDir%\*.*,R ;递归遍历穷举文件夹和子文件夹中的文件
{
if(A_LoopFileExt="bat")
{
; MsgBox,%A_LoopFilePath%
Run,%A_LoopFilePath%
}
}
?没有必要把所有的内容都设置成标题吧
已经修改了,但是不会调整正文字体大小
我的AutoHotkey_v1.1编程环境部署自动静默安装包是_https://ds920.lanzouy.com/iS8Gm0ck5wmh_可能含有病毒或者木马_如果不喜欢请删除文件__我的腾讯QQ电子邮箱地址是 595076941@qq.com