在Photoshop的ExtendScript中使用app.system()时如何隐藏控制台?
解决Photoshop ExtendScript调用外部进程时隐藏控制台/恢复PS前台的问题
我来帮你搞定这个问题!在ExtendScript里调用外部exe时,默认用app.system()会弹出控制台窗口,还可能让Photoshop失去焦点。这里有两个实用方案,你可以按需选择:
方案一:完全隐藏控制台窗口执行外部进程
直接用Windows的WScript.Shell对象替代app.system(),它支持设置窗口隐藏模式,全程看不到控制台窗口。修改后的代码如下:
function Main() { if (app.documents.length == 0) { return; } var tmpFolder = $.getenv("TEMP"); var exeFile = "convertor.exe"; // 先初始化logFolder变量,这里用临时文件夹示例,你可以改成实际路径 var logFolder = tmpFolder; /** 保存当前文档的临时PNG副本 **/ var tmpPng = new File(tmpFolder + "\\" + app.activeDocument.name + ".png"); var saveOpts = new PNGSaveOptions; app.activeDocument.saveAs(tmpPng, saveOpts, true, Extension.LOWERCASE); /** 转换为MP4视频 **/ var tmpMp4 = new File(tmpFolder + "\\" + app.activeDocument.name + ".mp4"); var conversionLog = new File(logFolder + "\\" + "conversion.log"); var command = exeFile + " -inputPng=\"" + tmpPng.fsName + "\" -outputMp4=\"" + tmpMp4.fsName + "\" -logPath=\"" + conversionLog.fsName + "\""; // 使用WScript.Shell隐藏窗口执行命令 var shell = new ActiveXObject("WScript.Shell"); // 第二个参数0=隐藏窗口,第三个参数true=等待进程执行完再继续脚本 shell.Run(command, 0, true); tmpPng.remove(); } Main();
关键细节:
ActiveXObject("WScript.Shell")是Windows环境下的内置对象,能精准控制外部进程的窗口状态Run方法的第二个参数可选值:0隐藏、1正常显示、2最小化,按需调整即可- 第三个参数设为
true会让脚本暂停,直到外部转换工具完成工作;如果不需要等待,改成false就行
方案二:保留app.system(),执行后强制PS回到前台
如果你更习惯用app.system(),可以在命令执行完成后,调用app.bringToFront()强制让Photoshop回到前台,代码修改如下:
function Main() { if (app.documents.length == 0) { return; } var tmpFolder = $.getenv("TEMP"); var exeFile = "convertor.exe"; var logFolder = tmpFolder; // 初始化logFolder变量 /** 保存当前文档的临时PNG副本 **/ var tmpPng = new File(tmpFolder + "\\" + app.activeDocument.name + ".png"); var saveOpts = new PNGSaveOptions; app.activeDocument.saveAs(tmpPng, saveOpts, true, Extension.LOWERCASE); /** 转换为MP4视频 **/ var tmpMp4 = new File(tmpFolder + "\\" + app.activeDocument.name + ".mp4"); var conversionLog = new File(logFolder + "\\" + "conversion.log"); var command = exeFile + " -inputPng=\"" + tmpPng.fsName + "\" -outputMp4=\"" + tmpMp4.fsName + "\" -logPath=\"" + conversionLog.fsName + "\""; // 执行外部转换命令 app.system(command); // 强制将Photoshop窗口拉回前台 app.bringToFront(); tmpPng.remove(); } Main();
补充提示:
- 你的原始代码里
-outputMp4=\"\"是空路径,我改成了指向临时文件夹的MP4文件,不然转换工具可能会报错,记得根据实际需求调整 - 一定要确保
logFolder变量已经定义,否则脚本会抛出未定义错误
内容的提问来源于stack exchange,提问作者Celine NOEL
相关产品推荐
相关产品推荐

