Obtener la lista de acciones de Photoshop usando Objective-C

Estoy escribiendo una aplicación para OSX utilizando C ++ y Obj-C que interactúa con Photoshop.

He estado usando NSAppleScript con AppleScripts creados dinámicamente para manejar Photoshop (sí, da un poco de miedo …) Me encantaría poder manejar Photoshop de una manera diferente, así que si alguien sabe una manera mejor, estoy abierto a ¡eso! Desafortunadamente, no puedo usar ScriptingBridge ya que no puedo vincular a mis usuarios con Leopard.

El gran problema surgió la otra noche cuando fui a consultar la lista de acciones de Photoshop para mostrarlas a mis usuarios. Al parecer, la integración de secuencias de comandos de Photoshop no expone las API de la lista de acciones a AppleScript. Esta es la segunda razón por la que no puedo usar ScriptingBridge .

¿Alguien sabe cómo puedo acceder a la lista de acciones de Photoshop en mi progtwig Obj-C / C ++? Pregunta extra: ¿Alguien sabe una mejor manera de interactuar con Photoshop?

No creo que haya una “mejor” forma de interactuar con Photoshop. Applescript es el camino. Para eso fue construido. Con respecto a obtener una lista de las acciones, mi única sugerencia sería que las acciones deben ubicarse en una carpeta en algún lugar del disco duro. ¿No es cada acción un archivo separado? No estoy seguro de eso, pero sería un enfoque que vale la pena analizar. Quizás pueda averiguar en qué carpetas residen y obtener los nombres de los archivos de acción y, básicamente, volver a crear la jerarquía del menú de acciones consultando la estructura de la carpeta.

No estoy seguro de cómo hacerlo con AppleScript, pero puedes llamar a este JavaScript usando AppleScript para devolver los nombres en una lista de acciones determinada. Adapté esto de “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; } 
    Intereting Posts