Возвращаемое значение app.doScript()

  • Автор темы Автор темы Sho Nuff
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Sho Nuff

Участник
Топикстартер
Сообщения
50
Реакции
143
На AppleScript строка выполняемая через app.doScript возвращает последнее вычисленное значение:
Код:
alert(app.doScript('set a to 5', ScriptLanguage.APPLESCRIPT_LANGUAGE)); //  5

На JavaScript то же:
Код:
alert(app.doScript('a = 5', ScriptLanguage.JAVASCRIPT)); //  5

Но с VisualBasic такое не проходит:
Код:
alert(app.doScript('a = 5', ScriptLanguage.visualBasic)); // undefined

Как бы получить вычисленное VisualBasic значение не используя временный файл?
 
Ответ: Возвращаемое значение app.doScript()

В люстре я что-то делал таким образом:
Код:
appRef.DoJavaScript "var regColor = new CMYKColor();regColor.cyan = 100;regColor.magenta = 100;regColor.yellow = 100;regColor.black =100; arguments[0].fillColor=regColor;",Array(newPath)
В результате получал newPath.fillColor
Может здесь аналогично как-то? Я мало знаком с индизайновским скриптингом.

 
Ответ: Возвращаемое значение app.doScript()

Примеры от Adobe
Код:
//DoScriptParameters.jsx
//An InDesign CS3 JavaScript
//
//Shows how to send parameters to a script called using
//the doScript method.
var myParameters = ["Hello from DoScript", "Your message here."];
var myJavaScript = "alert(\"First argument: \" + arguments[0] + \"\\rSecond argument: \" + arguments[1]);";
app.doScript(myJavaScript, ScriptLanguage.javascript, myParameters);
if(File.fs == "Windows"){
	var myVBScript = "msgbox arguments(1), vbOKOnly, \"First argument: \" & arguments(0)";
	app.doScript(myVBScript, ScriptLanguage.visualBasic, myParameters);
}
else{
	var myAppleScript = "tell application \"Adobe InDesign CS3_J\\rdisplay dialog(\"First argument\" & item 1 of arguments & return & \"Second argument: \" & item 2 of arguments & return & end tell";
	app.doScript(myAppleScript, ScriptLanguage.applescriptLanguage, myParameters);
}


Код:
//DoScriptReturnValues.jsx
//An InDesign CS3 JavaScript
//
//Shows how to return values from a script called using
//the doScript method.
var myJavaScript = "app.scriptArgs.setValue(\"ScriptArgumentA\", \"This is the first script argument value.\");\r";
myJavaScript += "app.scriptArgs.setValue(\"ScriptArgumentB\", \"This is the second script argument value.\")";
var myScriptArgumentA = app.scriptArgs.getValue("ScriptArgumentA");
var myScriptArgumentB = app.scriptArgs.getValue("ScriptArgumentB");
alert("ScriptArgumentA: " + myScriptArgumentA + "\rScriptArgumentB: " + myScriptArgumentB);
if(File.fs == "Windows"){
	var myVBScript = "Set myInDesign = CreateObject(\"InDesign.Application.CS3_J\")\r";
	myVBScript += "myInDesign.ScriptArgs.SetValue \"ScriptArgumentA\", \"This is the first script argument value.\"\r";
	myVBScript += "myInDesign.ScriptArgs.SetValue \"ScriptArgumentB\", \"This is the second script argument value.\"";
	app.doScript(myVBScript, ScriptLanguage.visualBasic);
}
else{
	var myAppleScript = "tell application \"Adobe InDesign CS3_J\"\r";
	myAppleScript += "make script arg with properties{name:\"ScriptArgumentA\", value:\"This is the first script argument value.\"}\r";
	myAppleScript += "make script arg with properties{name:\"ScriptArgumentB\", value:\"This is the second script argument value.\"}\r";
	myAppleScript += "end tell\r";
	app.doScript(myAppleScript, ScriptLanguage.applescriptLanguage);
}
var myScriptArgumentA = app.scriptArgs.getValue("ScriptArgumentA");
var myScriptArgumentB = app.scriptArgs.getValue("ScriptArgumentB");
alert("ScriptArgumentA: " + myScriptArgumentA + "\rScriptArgumentB: " + myScriptArgumentB);
 
Ответ: Возвращаемое значение app.doScript()

Код:
var myVBScript = "Set myInDesign = CreateObject(\"InDesign.Application.CS3_J\")\r";
myVBScript += "myInDesign.ScriptArgs.SetValue \"ScriptArgumentA\", \"This is the first script argument value.\"\r";

Проблематично сейчас проверить, но что-то я сомневаюсь в надежности такого кода. Часто на машинах вижу 2-3 установки InDesign разных версий, локализций а то и просто 2 одинаковые копии "на всякий случай". К сожалению нет способа вызвать через CreateObject именно ту копию InDesign из которой мы делаем doScript.

Вот если бы получить ссылку на программу по пути возвращаемому app.filePath.fsName?
 
Статус
Закрыто для дальнейших ответов.