2010-07-27 1 views
1

내 AppleScript로는 자신의 이름을 감지 할 필요가 있으며, 다음은 스노우 레오파드에서 잘 실행 (10.6)왜 Applescript는 Script Editor에서 실행 되나 Application으로 저장하면 오류가 발생합니까?

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

은 "이름 : 애플 스크립트 편집기"표시 나는 애플 스크립트 편집기에서 실행할 때, 그것은 "이름을 표시합니다 : NewTest "를 NewTest라는 응용 프로그램으로 저장하면됩니다.

Leopare (10.5) 시스템에서 실행할 때 "<의 이름을 입력 할 수 없습니다."라는 오류 메시지가 표시됩니다. "문자열로"부분을 제거하면 스크립트 편집기에서 "이름 : 스크립트 편집기"를 반환하지만 응용 프로그램으로 저장하면 오류가 발생하고 "이름을 가져올 수 없습니다"라는 메시지가 표시됩니다.

스크립트 편집기에서 실행하고 10.5 이하로 응용 프로그램으로 저장하는 것과 다른 점은 무엇입니까?

답변

2

내가 확인하지 않았지만 또 다른 생각이 있습니다. 문제를 일으킬 수있는 한 가지는 명령 "get"입니다. 일반적으로 "name of me"와 같은 명령을 실행하면 get 명령이 암시되어 "get name of me"를 실행하게됩니다. 문제는 암시 된 "get"이 항상 그런 것은 아니라는 것입니다. 그래서 때로는 명시 적으로 "get"이라고 말해야합니다. 내가 너와 같은 문제가 생길 때마다 내가 시도하는 첫 번째 일은 명령에 "get"을 추가하는 것이다. 당신이 결코 알지 못하기 때문에 버릇이된다. 항상 get이라는 단어를 사용할 수 있으며 그 문제는 결코 발생하지 않습니다. 따라서 명령을 "my_name을 (내 이름 가져 오기)"로 변경하십시오. 10.5 문제가 해결되는지 알고 싶습니다. 또한 이름은 이미 문자열이므로 결과를 문자열로 강제 변환 할 필요가 없습니다.

편집 : 이전 스크립트를 살펴 보았습니다. 이름을 얻으려면 다음 코드를 사용했습니다. 내 노트에서 나는 이러한 의견 ...

이 -이

모든 파일 확장자가없는 응용 프로그램이나 스크립트의 이름을 얻을 것이다 - 스크립트가에서 실행될 때 때문에이 경로를 사용하여 수행됩니다 스크립트 메뉴를 선택하고 myName을 내 이름으로 쓰면 결과는 실제 이름 대신 "applescript runner"가됩니다

- 또한 때때로 Finder에 나타나는 이름을 얻게됩니다 시스템 이벤트 프로세스 이름이 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

방금 ​​시도했지만'get name of me '명령은 "이름을 얻을 수 없습니다"라는 오류 메시지를 반환합니다. Applescript 응용 프로그램이 비정형 응용 프로그램이라는 것을 내 이론으로 다시 생각합니다. –

+0

Philip을 확인해 주셔서 감사합니다. 내 대답을 편집하여 다른 해결책을 찾아보십시오. – regulus6633

+0

답변과 도움을 주셔서 감사합니다. 내 솔루션은 단순히 "이름"대신 경로를 사용하는 코드를 따라갔습니다. 아직 알려지지 않은 이유 때문에 Leopard 및 Snow Leopard에서 다른 것을 반환합니다. 감사. – mlusby

3

Applescript 응용 프로그램은 단어의 진정한 의미에서 "응용 프로그램"이 아닙니다. 많은 컨텍스트가 변경됩니다. "get path to me"는 스크립트 또는 응용 프로그램으로 실행될 때 달라집니다. 왜냐하면 이들은 Carbon 또는 Cocoa 기반 응용 프로그램과는 반대로 여전히 유능한 Applescript이기 때문에 다릅니다. Finder에 대해 유사한 코드 실행 중 ...

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

Finder는 Carbon/Cocoa 기반 응용 프로그램이므로 예상대로 작동합니다.

10. "me"에 대한 호출이 예상보다 많이 작동하도록하는 AppleScript 프레임 워크와 관련하여 OS에 변경된 사항이있는 것처럼 들리는 것 외에는 진짜 대답이 없습니다.

나는 me이 어떻게 작동하는지 더 자세히 알기 위해 the section in the Applescript guide about the me and it keywords을 읽을 것을 권장합니다.

관련 문제