为我的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