Skip to main content
Legend
April 15, 2022
Answered

スクリプトでのツールの切り替えやメニューの実行

  • April 15, 2022
  • 2 replies
  • 830 views

Photoshopで、InDesignやIllustratorのようにスクリプトでツールやメニューコマンドの実行はできるのでしょうか?

いろいろ調べてみたのですが、ツールやメニューのIDがわからず、質問した次第です。

よろしくお願いします。

This topic has been closed for replies.
Correct answer Ten A
もうひとつ追加しておきます。トップレベルオブジェクトに存在するActionReferenceから各種情報を取り出すには以下のようにActionDescripterを取り出し各種情報をgetKeyメソッドでTypeIDをキーとして取り出せばOKです。
 
var targetObject = "application"
var arf = new ActionReference ()
arf.putEnumerated (
stringIDToTypeID (targetObject),
stringIDToTypeID ("ordinal"),
stringIDToTypeID ("targetEnum"));
var ad = executeActionGet (arf);

str = "StringID : typeID : charID";
for (var i=0; i<ad.count; i++) 
str += typeIDToStringID(ad.getKey(i)) +  " : " + ad.getKey(i) + " : " + typeIDToCharID(ad.getKey(i)) + "\n";
 
と、各種IDが参照できるようになったところで…
Photoshopのスクリプティングの基本というのは各アクションに対してパラメータを定義して実行する形式です。これはIllustratorやInDesignといったアプリケーションと比較するとかなり異質な仕組みです。
例えばCMYK変換をメニューから実行するにしても以下のようにActionDescriptorに対してパラメータを設定した上でアクションを実行するという手順を行なっています。
 
var desc = new ActionDescriptor();
desc.putClass(stringIDToTypeID("to"), stringIDToTypeID("CMYKColorMode"));
executeAction(stringIDToTypeID("convertMode"), desc, DialogModes.NO);
 
逆に言うと、おおよそのメニュー項目もScriptListenerプラグインを利用すれば利用可能なものが用意できるということです。

2 replies

Ten A
Community Expert
Ten ACommunity ExpertCorrect answer
Community Expert
April 16, 2022
もうひとつ追加しておきます。トップレベルオブジェクトに存在するActionReferenceから各種情報を取り出すには以下のようにActionDescripterを取り出し各種情報をgetKeyメソッドでTypeIDをキーとして取り出せばOKです。
 
var targetObject = "application"
var arf = new ActionReference ()
arf.putEnumerated (
stringIDToTypeID (targetObject),
stringIDToTypeID ("ordinal"),
stringIDToTypeID ("targetEnum"));
var ad = executeActionGet (arf);

str = "StringID : typeID : charID";
for (var i=0; i<ad.count; i++) 
str += typeIDToStringID(ad.getKey(i)) +  " : " + ad.getKey(i) + " : " + typeIDToCharID(ad.getKey(i)) + "\n";
 
と、各種IDが参照できるようになったところで…
Photoshopのスクリプティングの基本というのは各アクションに対してパラメータを定義して実行する形式です。これはIllustratorやInDesignといったアプリケーションと比較するとかなり異質な仕組みです。
例えばCMYK変換をメニューから実行するにしても以下のようにActionDescriptorに対してパラメータを設定した上でアクションを実行するという手順を行なっています。
 
var desc = new ActionDescriptor();
desc.putClass(stringIDToTypeID("to"), stringIDToTypeID("CMYKColorMode"));
executeAction(stringIDToTypeID("convertMode"), desc, DialogModes.NO);
 
逆に言うと、おおよそのメニュー項目もScriptListenerプラグインを利用すれば利用可能なものが用意できるということです。
kingtoshAuthor
Legend
April 19, 2022

ありがとうございます。

結構面倒なんですね。とりあえず、ScriptListenerプラグインを入れてどうなrってるのか見てみます。

Ten A
Community Expert
Community Expert
April 15, 2022

ツールの名前は

var ar = new ActionReference();   
ar.putEnumerated( charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );   
alert(typeIDToStringID(executeActionGet(ar).getEnumerationType(stringIDToTypeID('tool'))));    

みたいな感じで、その名前を使ってツールを切り替えるのは

var toolName = "marqueeRectTool";
var ad = new ActionDescriptor(), arf = new ActionReference();
arf.putClass( app.stringIDToTypeID(toolName));
ad.putReference( app.charIDToTypeID('null'), arf);
executeAction( app.charIDToTypeID('slct'), ad, DialogModes.NO);

こうですね。

メニューはどうだったか…