終了

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

積極的な参加者 ,
Apr 15, 2022 Apr 15, 2022

リンクをクリップボードにコピー

コピー完了

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

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

よろしくお願いします。

キーワード
アクションとスクリプト

表示

543

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 2 件の正解

Community Expert , Apr 15, 2022 Apr 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'), a
...

投票

翻訳

翻訳
Community Expert , Apr 16, 2022 Apr 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(a
...

投票

翻訳

翻訳
Community Expert ,
Apr 15, 2022 Apr 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);

こうですね。

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 16, 2022 Apr 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プラグインを利用すれば利用可能なものが用意できるということです。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Apr 19, 2022 Apr 19, 2022

リンクをクリップボードにコピー

コピー完了

最新

ありがとうございます。

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines