2015-08-13 2 views
0

J'essaye d'énumérer toutes mes actions dans Photoshop. Ceci est le script que j'essaie de répliquer LINK. Mais il saute toujours le dernier.Liste de toutes les actions de Photoshop

Donc, cette partie répertorie mes groupes d'action. Et dans la boucle, je vais énumérer toutes les actions. Mais cette partie échoue aussi. Je pense que c'est comme ça que le flot du code fait erreur pour moi:

L'objet "set 1 of set 2 of set 3" n'est actuellement pas disponible.

Voici ce que je suis venu avec jusqu'à

Dim actionSet As Integer = cTID("ASet") 
Dim action As Integer = cTID("Actn") 
Dim name As Integer = cTID("Nm ") 
Dim numberOfChildren As Integer = cTID("NmbC") 

Dim refASet = New ActionReference() 
Dim refa = New ActionReference() 

Dim desc = New ActionDescriptor() 
Dim adesc = New ActionDescriptor() 

Dim index As Integer = 1 
While True 
    refASet.PutIndex(actionSet, index) 

    Try 
     desc = _appPs.ExecuteActionGet(refASet) 
    Catch ex As Exception 
     Exit While 
    End Try 

    If desc.HasKey(name) Then 
     Dim actions(desc.GetInteger(numberOfChildren)) As String 
     MsgBox(desc.GetString(name)) 
    End If 
    index += 1 
End While 
+0

Je pense que vous devriez inspecter l'Exception et faire quelque chose de sensé au lieu de simplement sortir du While. Vous pourriez manquer quelque chose là-bas. –

+0

Que se passe-t-il si vous définissez initialement 'Dim index As Integer = 0' –

+0

Photoshop n'utilisez pas la valeur stat de l'index 0. Le premier élément est toujours UN –

Répondre

2

Eh bien, il était plus simple que prévu.

Vous devez réinitialiser les ActionDescriptor et ActionReference avant de pouvoir les appeler à nouveau.

Dim actionSet As Integer = cTID("ASet") 
Dim action As Integer = cTID("Actn") 
Dim name As Integer = cTID("Nm ") 
Dim numberOfChildren As Integer = cTID("NmbC") 

Dim index As Integer = 1 
While True 
    Dim desc = New ActionDescriptor() 
    Dim refASet = New ActionReference() 

    refASet.PutIndex(actionSet, index) 

    Try 
     desc = _appPs.ExecuteActionGet(refASet) 
    Catch ex As Exception 
     Exit While 
    End Try 

    If desc.HasKey(name) Then 
     Dim actions(desc.GetInteger(numberOfChildren)) As String 
     MsgBox(desc.GetString(name)) 
    End If 
    index += 1 
End While