Miq*_*lla 2 c++ photoshop applescript objective-c
我正在使用 C++ 和 Obj-C 编写一个与 Photoshop 交互的 OSX 应用程序。
我一直在使用NSAppleScript动态构建的 AppleScripts 来驱动 Photoshop(是的,这有点可怕......)我希望能够以不同的方式驱动 Photoshop,所以如果有人知道更好的方法,我愿意接受!不幸的是,我无法使用ScriptingBridge,因为我无法将我的用户绑定到 Leopard。
就在前几天晚上,当我从 Photoshop 查询操作列表以向用户显示时,出现了大问题。显然,Photoshop 的脚本集成不会向 AppleScript 公开动作列表 API。这是我不能使用的第二个原因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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |