我試圖將AppleScripting支持添加到我的基於非Cocoa的應用程序。Mac Carbon應用程序中的可腳本化(AppleScript)
我正在處理低級別函數,如AEGetParamDesc,自己處理參數form
/want
/seld
。
我的詞彙提供了一個類,我們稱之爲「圖像」。它有一個屬性「名稱」。
我已經得到了一些AppleScript的代碼工作,如:
get Images
get name of every Image
get count Images
get every Image
get first Image
get Image 1
所以,基本上,訪問的對象和它的屬性都有效。
然而,當我嘗試了這些類似的訪問形式,他們都失敗:
get Images whose name = "foo"
和
repeat with img in Images
end repeat
在第一種情況下,看來我得處理test
形式。
在第二種情況下,計數運算符(cnte
)不直接請求類對象,而是使用描述索引對象的cobj
運算符。
這一切都讓我想知道這將會走多遠。我需要在代碼中單獨實現每種可能的Applescript語法和操作符嗎?我假設「who」操作符只是簡單地將「每個圖像」和「圖像x的名稱」的請求組合起來,就像我可以在Applescript中單獨編寫它們的方式一樣,而不是對它們中的每一個使用不同的AppleEvent公式。
與whose <boolean-test>
相同。爲什麼AppleScript不會簡單地執行name = "foo"
本身的相等性測試,因爲它是一個文本比較,根本不需要涉及我的應用程序代碼呢?
有什麼我失蹤了嗎?我可以將這些轉發給AE功能嗎?我還沒有意識到,還是我必須自己處理所有可能的比較和流量控制命令?
是的,我是FAF的作者,試圖將Scriptability添加到它,實際上:) 有趣的 - 我一直在看當前的Sketch2源,它使用NS類,它神奇地處理所有複雜的東西。我會對使用古老API的舊版本非常感興趣。 我現在來看看鏈接的文章,也許這已經是我所需要的了。 –
呵呵,雖然文章處理「其」的術語,但似乎沒有任何特定的代碼來處理測試(例如「is」和「=」)。但是我看到了對AEResolve的調用,到目前爲止我還沒有使用過自己。我想知道AEResolve是否對我有用?很難弄清楚蘋果已經刪除了所有這些舊文檔。將需要做更多的挖掘。 –
預Cocoa AS引擎對你必須安裝的處理程序使用回調機制,其中AEResolve類似於交換終端,它不斷詢問令牌,然後用該令牌等調用你的方法,直到它獲得了令牌請求的類型包含請求的數據。這花了很多粗糙的代碼,包括AETE資源,但是一旦你掌握了它,它就是可行的。 Cocoa通常更容易,它使用字符串查找調用類和方法的魔力,所以在SDEF中,AS術語與Cocoa方法的映射更爲清晰。 –