首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PhotoShop脚本打开嵌入式智能对象时抑制“解决丢失的资产”对话框

从PhotoShop脚本打开嵌入式智能对象时抑制“解决丢失的资产”对话框
EN

Stack Overflow用户
提问于 2022-08-24 15:22:45
回答 1查看 81关注 0票数 0

我需要通过编程来抑制Photoshop显示的“解决丢失的资产”对话框,当打开包含中断的库链接的嵌入式智能对象时。在我的例子中,我不关心缺少的链接,也不能阻止我的脚本的执行,等待手动干预来取消对话框。

我使用JavaScript打开Photoshop 2022中的智能对象,如下所示(为了简洁起见,省略了其他文件类型验证检查):

代码语言:javascript
复制
app.displayDialogs = DialogModes.NO;

//...

if (layer.kind == LayerKind.SMARTOBJECT) {
    try {
        executeAction(stringIDToTypeID("placedLayerEditContents"), new ActionDescriptor(), DialogModes.NO);
        // <- dialog still shows here, script execution is blocked, and no exceptions to catch after dialog is closed
    } catch(e) {
        alert(e);
    }
}

代码按预期工作,只是Photoshop似乎既忽略了DialogModes.NO参数,也忽略了在开头设置的displayDialogs值。在尝试/捕捉中包装调用站点在这里没有帮助,因为在解析链接资产时抛出的任何异常都会被Photoshop进程有效吞没,并在executeAction返回之前通过"relink“对话框进行处理。

从脚本中查询打开的对话以发送cancel或esc命令是可以接受的,但是由于这个对话框的阻塞性质,我的脚本在手动关闭后才知道它的存在(在打开Smart对象之后立即发出警报,直到对话框关闭后才会显示)。

调用app.runMenuItem没有什么不同:

代码语言:javascript
复制
app.runMenuItem(stringIDToTypeID('placedLayerEditContents'));

除了几年前从未完全解决的这个线程描述了同一个问题之外,我还没有找到真正的解决办法。

我愿意使用“创造性”解决方案来缓解这个问题,如果没有明确的方法来抑制这个对话框,只要它不破坏智能对象内容(也就是没有光栅/扁平)。异步轮询对话框窗口的存在,或者在创建对话框时添加监听器似乎都是合理的解决办法,但我的ps脚本经验有限,我不确定如何做到这一点。

请注意,我在这里处理的是嵌入式智能对象,而不是链接的智能对象,因此在通过Photoshop打开智能对象之前,没有支持智能对象的物理文件(在右键单击智能对象层时,双击智能对象层预览拇指,或在上下文菜单中选择“编辑内容”项)。

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 08:20:28

我在找一个修复方法来消除缺失的字体。这也将为智能对象的公开对话提供方便。代码已从这里中提取

代码语言:javascript
复制
var f = File.openDialog();
if (f)
{
  (d = new ActionDescriptor).putPath(stringIDToTypeID("target"), f);
  executeAction(stringIDToTypeID("open"), d, DialogModes.NO);
  // open your file now
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73475799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档