2013-03-13 5 views
0

Я знаю, что использование AppleScript не может получить доступ к контенту только что созданного пользователя, поэтому я использую скрипты графического интерфейса. Но я хочу, чтобы Mail.app содержал свою собственную кнопку, которая добавила во вновь созданные файлы, которые я отправляю из моей нужной директории. У меня есть плагин для Mail.app, есть сценарий, который вызывается моей собственной кнопкой. Скрипт творит чудеса сам по себе, но он не работает при вызове из плагина. Что я делаю не так?AppleScript творит чудеса самостоятельно, но не работает при вызове из плагина

ошибка

{ 
NSAppleScriptErrorAppName = "System Events"; 
NSAppleScriptErrorBriefMessage = "System Events get error: Can not catch window 1 of process "Mail". Wrong index."; 
NSAppleScriptErrorMessage = "System Events get error: Can not catch window 1 of process "Mail". Wrong index."; 
NSAppleScriptErrorNumber = "-1719"; 
NSAppleScriptErrorRange = "NSRange: {0, 0}"; 
} 

и сценарий

property theMessage : "" 
property allMessages : "" 
property myPath : "" 
property mySubfolder : "prettyAttachment" 

tell application "AppleScript Utility" 
    set GUI Scripting enabled to true 
end tell 

tell application "Mail" 

try 
    set allMessages to outgoing messages 
    set theMessage to front outgoing message 
end try 

if theMessage is not equal to "" then 
    tell application "Finder" 
     activate 
     set myPath to quoted form of POSIX path of ((path to downloads folder as string) & mySubfolder) 
     set shellScriptText to "open " & myPath 
     do shell script shellScriptText 

     tell application "System Events" 
      keystroke "a" using command down 
      keystroke "c" using command down 
      keystroke "h" using command down 
     end tell 
    end tell 

    activate --mail.app 

    tell application "System Events" 
     tell process "Mail" 
      --?set visible to true 
      set allUI to every UI element of front window 
     end tell 
     repeat with anUI in allUI --as list 
      set theRole to role of anUI 
      if theRole is equal to "AXScrollArea" then 
       set allSubUi to UI elements of anUI 
       if (count of allSubUi) is equal to 2 then 
        --set focused of anUI to true 
        set value of attribute "AXFocused" of anUI to true 
        tell application "System Events" 
         keystroke "v" using command down 
         return true 
        end tell 
       end if 
      end if 
     end repeat 
    end tell 
    end if 
end tell 

Таким образом, для тестирования вы можете добавить несколько файлов в prettyAttachment папку в папке Download -> Открыть Mail.app и создать сообщение -> start script

Но почему не работает скрипт в комплекте xCode? С уважением и надеждой на помощь.

EDIT1 также см Not able to Execute AppleScript within "Mail" application

ответ

1

Не очень элегантное решение, но это работает. Хотя это пара костылей во всех отношениях =)

Я, м, уволил мой сценарий в моем классе MailDocumentEditor swizzle. я удалил из сценария все о фокусе на теле сообщения и метод:

@interface MailDocumentEditor : DocumentEditor<...>{...} 
... 
- (EditingMessageWebView)webView; 
... 

и

@interface EditingMessageWebView : TilingWebView <...>{...} 
... 
- (BOOL)isActive; 
- (void)paste:(id)arg1; 
... 

и все вместе

[[PrettyBundle sharedInstance] attachPrettyFiles];//fired first half of script (copy to clipboard) 

MailDocumentEditor *prettyResult = (MailDocumentEditor*)self; 
id prettyWebView = [pbResult webView]; 
[prettyWebView paste:nil]; 

это все =)