爲我的Mac應用程序添加腳本功能,我想知道是否可以從我的應用程序調用腳本末端的處理程序。如果是這樣,那是如何工作的?Cocoa腳本:我如何使用AppleScript處理程序(事件)?
據我所知,處理程序就像函數(如在「運行中」),可以通過腳本自身代碼之外的事件調用。 Sdef文件瞭解event
標籤,看到我可以使用Sdef Editor輸入事件。但是我在Cocoa腳本指南中找不到關於此的任何文檔。
我的應用程序記錄剪貼板,所以我不知道是否可以讓運行腳本知道已經記錄了一個新的剪貼板,以便腳本可以對其執行操作。
現在,我不希望調用單獨的(獨立)腳本來查找並加載並運行這樣的事件,而是希望用戶能夠不斷運行一個腳本來聲明一個事件,即我的應用程序調用。 (這是否是一個好主意不應該在這裏討論,我只是以此爲例來理解AppleScript事件。)
這可能嗎?如果不是,sdef中的事件條目是什麼意思?
更新:這是在AppleScript的處理程序上的介紹:MacScripter: Getting Started with Handlers
我已經能夠通過使用硬編碼的處理程序名稱來調用我通過NSAppleScript加載的腳本的處理程序。我想這是它的更乾淨的版本。我看了一個使用這些事件的消息腳本,我想我現在可以將它們結合在一起。我猜這些知識大部分來自Cocoa腳本API和Inside Mac,現在很難找到,Apple已經從服務器中刪除了所有舊文檔。就好像它們不再有用:) –
那麼,你如何建議我管理腳本和我的應用程序之間的連接?我想我的應用程序必須選擇(固定名稱?)並加載腳本本身,然後使用其默認處理程序(「運行中」)運行它以啓動並準備好它?應用程序是否也應該監視mod日期戳以在其更改時重新加載它?或者那是不好的,因爲腳本可能會將它的屬性存儲在那裏,當以這種方式重新加載時會導致問題?或者是否有腳本被用戶調用並且應用程序識別腳本並保持連接的方式? –
通過'NSAppleScript'運行腳本並將Apple Events發送給sdef文件中定義的處理程序是兩件完全不同的事情。這取決於目標應用程序是否需要直接(單向)通知腳本特定事件的發生或使用類似庫的腳本(雙向)。還有第三種方式使用'NSAppleScriptTask'和位於指定'Application Scripts'文件夾中的腳本。 – vadian