[英]Get Photoshop's action list using Objective-C
我正在使用C ++和Obj-C編寫與Photoshop交互的OSX應用程序。
我一直在使用帶有動態構建的AppleScript的NSAppleScript
來驅動Photoshop(是的,這有點嚇人……)我希望能夠以不同的方式來驅動Photoshop,因此,如果有人知道更好的方法,我很樂意它! 不幸的是,我無法使用ScriptingBridge
因為無法將用戶綁定到Leopard。
最大的問題是前一天晚上,當我去從Photoshop查詢動作列表以顯示給用戶時。 顯然,Photoshop的腳本集成不會將操作列表API公開給AppleScript。 這是我不能使用ScriptingBridge
的第二個原因。
有誰知道我可以在Obj-C / C ++程序中訪問Photoshop動作列表的方法嗎? 獎勵問題:有人知道我可以與Photoshop進行交互的更好方法嗎?
不確定如何使用AppleScript進行操作,但是可以使用AppleScript調用此JavaScript,以返回給定操作列表中的名稱。 我改編自“ Image Processor.jsx”。
function GetActionList(folderName)
{
var setCounter = 1;
var actions = '';
var actionName;
gClassActionSet = charIDToTypeID( 'ASet' );
gClassAction = charIDToTypeID( 'Actn' );
gKeyName = charIDToTypeID( 'Nm ' );
gKeyNumberOfChildren = charIDToTypeID( 'NmbC' );
while ( true )
{
var ref = new ActionReference();
ref.putIndex( gClassActionSet, setCounter );
var desc = undefined;
try { desc = executeActionGet( ref ); }
catch( e ) { break; }
actionName = desc.getString( gKeyName );
var numberChildren = 0;
if ( desc.hasKey( gKeyNumberOfChildren ) )
numberChildren = desc.getInteger( gKeyNumberOfChildren );
if ( numberChildren )
{
if(actionName == folderName)
{
for ( var i = 1; i <= numberChildren; i++ )
{
var ref = new ActionReference();
ref.putIndex( gClassAction, i );
ref.putIndex( gClassActionSet, setCounter );
var desc = undefined;
desc = executeActionGet( ref );
if( desc.hasKey( gKeyName ) )
{
if(actions.length > 0)
actions = actions + ',' + desc.getString( gKeyName );
else
actions = desc.getString( gKeyName );
}
}
break;
}
}
setCounter++;
}
return actions;
}
我認為沒有與Photoshop交互的“更好”的方法。 Applescript是方法。 這就是它的用途。 關於獲取操作列表,我唯一的建議是,這些操作必須位於硬盤驅動器上的某個文件夾中。 每個動作不是一個單獨的文件嗎? 我不確定,但這是值得研究的方法。 也許您可以找出它們所駐留的文件夾,並獲取操作的文件名,並通過查詢文件夾結構來基本上重新創建操作菜單的層次結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.