投稿

4月, 2013の投稿を表示しています

Photoshop.Application.DoJavaScriptをjscript(jsxではない)から呼び出す時に嵌ったのでメモ

Photoshopを外部スクリプトから操作するとき var app = new ActiveXObject('Photoshop.Application'); とPhotoshopオブジェクトを作っておいて app.DoJavaScriptを呼び出すのですが、外部のスクリプトから引数を渡さなければ 問題ないのですが、引数を渡したいときに嵌った。 引数は第二パラメータに配列で渡す必要があるので以下のようなコードを書いた。 app.DoJavaScript("alert('Hello World!:' + arguments[0]);", ['引数1'], 1); これを実行すると、「無効な引数 - 引数2 - 配列が必要」というエラーが発生してしまう。 JavaScriptの配列はCOMでは配列扱いにしてくれない臭い。 同じようなことをVBScriptで書いた場合、すんなりと動いてしまう。。。。 Dim app Set app = CreateObject("Photoshop.Application") Dim arg arg = Array("引数1", "2") app.DoJavaScript "alert('Hello World!' + arguments[0]);", arg, 1 実行するとPhotoshop上で「Hello World! 引数1」とメッセージが表示される。 VBScriptの配列はCOMの配列として扱ってくれるようだ。 これを解決するために以下の様な関数を作ってみた。 function toVBArray(arry) { var dic = new ActiveXObject("Scripting.Dictionary"); for(var i = 0; i < arry.length; ++i) { dic.add(i, arry[i]); } return dic.Items(); } JScriptの配列をVBSc