如何在CopyHere中传递Flag参数?字体安装弹窗无法消除
解决VBS调用CopyHere安装字体时弹窗无法屏蔽的问题
你使用的16(对应十六进制&H10&)参数仅能控制文件复制进度对话框,但字体安装时弹出的注册提示弹窗是系统字体服务触发的,这个参数无法屏蔽这类弹窗。
方案一:调整CopyHere参数组合
尝试使用多参数组合,覆盖错误提示、进度对话框和重复文件提示,参数值为十进制148(对应&H10& + &H4& + &H80&),各参数作用:
&H10&:隐藏复制进度对话框&H4&:隐藏错误提示对话框&H80&:跳过已存在文件不提示
修改后的代码:
Set objFSO = CreateObject("Scripting.FileSystemObject") objStartFolder = CStr(WScript.Arguments.Item(0)) Const FONTS = &H14& Set objShell = CreateObject("Shell.Application") Set objFontFolder = objShell.Namespace(FONTS) Set objFolder = objFSO.GetFolder(objStartFolder) Set colFiles = objFolder.Files For Each objFile in colFiles objFontFolder.CopyHere objFile.Path, 148 Next
方案二:直接复制+静默注册表注册
如果CopyHere参数仍无效,可直接复制字体文件到系统字体目录,再通过注册表静默注册,完全避开系统弹窗:
Set objFSO = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") objStartFolder = CStr(WScript.Arguments.Item(0)) fontDir = objShell.ExpandEnvironmentStrings("%windir%\Fonts") Set objFolder = objFSO.GetFolder(objStartFolder) Set colFiles = objFolder.Files For Each objFile in colFiles ' 复制字体文件到系统字体目录 objFSO.CopyFile objFile.Path, fontDir & "\", True ' 注册表静默注册(仅支持TrueType字体) objShell.Run "reg add ""HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"" /v """ & objFile.Name & """ /t REG_SZ /d """ & objFile.Name & """ /f", 0, True Next
注意:此方法需要脚本以管理员权限运行,否则无法写入系统字体目录和注册表。
内容的提问来源于stack exchange,提问作者Benoît RODDE
相关产品推荐
相关产品推荐

