我试图将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方法的映射更为清晰。 –