You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:46