2010-07-27 14 views
1

Mon AppleScript doit détecter son propre nom, et ce qui suit fonctionne bien sur Snow Leopard (10,6)Pourquoi Applescript s'exécute-t-il dans Script Editor, mais une erreur lors de l'enregistrement en tant qu'application?

set my_name to name of me as string 
display dialog "Name: " & my_name 

Il affiche « Nom: AppleScript Editor » quand je le lance à partir AppleScript Editor, et il affiche « Nom : NewTest "lorsque je l'enregistre en tant qu'application appelée NewTest.

Lorsque je l'exécute sur une machine Leopare (10.5), il se plaint "Impossible de nommer <> en chaîne de caractères." Lorsque je supprime la partie "en tant que chaîne", il s'exécute sous Script Editor, renvoyant "Name: Script Editor", mais lorsqu'il est enregistré en tant qu'application, il est erroné et dit "Impossible d'obtenir le nom". Qu'est-ce qui est différent de l'exécution dans l'éditeur de script et de l'enregistrement en tant qu'application sous 10.5?

Répondre

2

Voici une autre pensée bien que je n'ai pas vérifié. Une chose qui peut causer des problèmes est la commande "get". En général, lorsque vous exécutez une commande comme "nom de moi", la commande get est implicite, donc vous exécutez vraiment "get name of me". Le problème est que le "get" implicite n'est pas toujours le cas. Donc parfois vous devez dire "get" explicitement. Chaque fois que j'ai un problème comme le vôtre, la première chose que j'essaie est d'ajouter "get" à la commande ... c'est devenu une habitude parce que vous ne savez jamais. Notez que vous pouvez toujours utiliser le mot get et ne jamais avoir ce problème. En tant que tel, essayez de changer votre commande pour "définir mon_nom à (obtenir le nom de moi)". Je serais intéressé de savoir si cela résout votre problème 10.5. Notez également qu'un nom est déjà une chaîne, il n'est donc pas nécessaire de contraindre le résultat à une chaîne.

EDIT: J'ai regardé certains de mes anciens scripts. J'ai utilisé le code suivant pour obtenir le nom. Dans mes notes, j'ai ces commentaires ...

- cela obtenir le nom de l'application ou d'un script sans extension de fichier

- il est fait en utilisant le chemin parce que quand un script est exécuté à partir du menu script, et vous écrivez set myName à mon nom, puis le résultat est "applescript runner" au lieu du nom réel

- aussi il assure que vous obtenez le nom tel qu'il apparaît dans le Finder, car parfois le nom du processus d'événements système est différent du nom du Finder

on getMyName() 
    set myPath to path to me as text 
    if myPath ends with ":" then 
     set n to -2 
    else 
     set n to -1 
    end if 
    set AppleScript's text item delimiters to ":" 
    set myName to text item n of myPath 
    if (myName contains ".") then 
     set AppleScript's text item delimiters to "." 
     set myName to text 1 thru text item -2 of myName 
    end if 
    set AppleScript's text item delimiters to "" 
    return myName 
end getMyName 
+0

Je viens de l'essayer et la commande 'get name of me' renvoie simplement le message d'erreur" Can not get name ". Je pense que cela revient à ma théorie selon laquelle une application Applescript est une application atypique. –

+0

Merci de vérifier que Philip. J'ai édité ma réponse alors vérifiez ceci pour une autre solution. – regulus6633

+0

J'apprécie vos deux réponses et l'aide. Ma solution a suivi de près le code que vous avez, en utilisant le chemin au lieu de simplement "nom de", qui, pour des raisons encore inconnues, renvoie des choses différentes dans Léopard et Snow Leopard. Merci. – mlusby

3

Une application Applescript n'est pas une "application" dans le vrai sens du mot. Beaucoup de contextes changent, comme "get path to me" sera différent quand il est exécuté en tant que script ou en tant qu'application, parce qu'ils sont encore bons AppLyscript plutôt que d'une application basée sur le carbone ou le cacao. Exécution d'un code similaire contre le Finder ...

tell application "Finder" 
    set my_name to name as string 
    display dialog "Finder: " & my_name 
end tell 

... se comporte comme prévu parce que le Finder est un carbone/application à base de cacao.

Je n'ai pas de vraie réponse autre que de dire qu'il semble qu'il y ait eu une modification apportée au système d'exploitation par rapport au framework Applescript de 10.6 qui fait que l'appel à "moi" se comporte plus comme prévu. Je recommande de lire the section in the Applescript guide about the me and it keywords pour mieux comprendre comment fonctionne me.