【问题标题】:VBScript to call JavaScriptVBScript 调用 JavaScript
【发布时间】:2017-02-08 19:51:48
【问题描述】:

在这里走投无路。有没有办法让 Photoshop VBScript 调用 JavaScript 文件?

或者至少将一些用户输入(变量或函数返回)从一个脚本传递到另一个脚本。

我这样做的原因是什么?我在question 中遇到过类似的问题,并考虑使用 VBScript UI 来驱动 Photoshop 脚本。将现有的 jsx 重写到 VBS 中并不是一个真正的选择。

这就是我所拥有的。这个简单的 VBScript 要求用户输入他们的名字,然后在第二个脚本中将其创建为文本。

VBScript

' Ask User for input
Dim appRef
Set appRef = CreateObject( "Photoshop.Application" )

Dim askName : askName = InputBox("Enter name: ")

JavaScript

// create a document to work with
var docRef = app.documents.add(200, 100, 72, "Hello");

// Create a new art layer containing text
var artLayerRef = docRef.artLayers.add();
artLayerRef.kind = LayerKind.TEXT;

// Set the contents of the text layer.
var textItemRef = artLayerRef.textItem
textItemRef.contents = "Hello " + askName

我需要什么来连接两者?

【问题讨论】:

    标签: javascript vbscript photoshop-script


    【解决方案1】:

    我没有使用 Photoshop 编写脚本的经验,做过一些研究。

    以下代码已使用 Adob​​e Photoshop® CS6 进行测试。

    PsJavaScriptExecutionMode 枚举常量是使用 Microsoft OLE/COM 对象查看器从 scriptingsupport.8li(Adobe Photoshop CS6 对象库)中提取的。

    VBScript:

    'PsJavaScriptExecutionMode Enums
    Const psNeverShowDebugger = 1, psDebuggerOnError = 2, psBeforeRunning = 3
    
    Dim appRef
    Set appRef = CreateObject("Photoshop.Application")
    
    Dim askName
        askName = InputBox("Enter name: ")
    
    appRef.DoJavaScriptFile "C:\scripts\myPSscript.jsx", Array(askName), psNeverShowDebugger
    

    JavaScript (myPSscript.jsx):

    // create a document to work with
    var docRef = app.documents.add(200, 100, 72, "Hello");
    
    // Create a new art layer containing text
    var artLayerRef = docRef.artLayers.add();
    artLayerRef.kind = LayerKind.TEXT;
    
    // Set the contents of the text layer.
    var textItemRef = artLayerRef.textItem
    var askName = arguments[0]; // first argument passed from VBScript
    textItemRef.contents = "Hello " + askName;
    

    希望对你有帮助。


    Adobe® Creative Suite® 5 Photoshop® Scripting Guide

    【讨论】:

    • 成功了! - 只要您没有调用相同的 VBscript 和 PScript 即 test.vbs & test,jsx
    • @GhoulFool 对不起,我听不懂。那么问题是什么?
    • 没问题。一切都很好:) 代码有效。但是我第一次尝试时,我将两个文件命名为相同的 C:\scripts\myPSscript.jsx & C:\scripts\myPSscript.vbs 并且出现了错误。通过将 VBS 重命名为 C:\scripts\myscript.vbs 现在有意义吗?
    • @GhoulFool 了解错误消息的内容很重要。我无法重现该问题。我想可能是file not found error,因为打错了。