Cocoa脚本:如何使用AppleScript处理程序(事件)?
将脚本能力添加到我的Mac应用程序中,我想知道是否可以从我的应用程序调用脚本端的处理程序。如果是这样的话,这是如何工作的 据我所知,处理程序类似于函数(如“运行时”),可以由脚本自身代码之外的事件调用。Sdef文件理解Cocoa脚本:如何使用AppleScript处理程序(事件)?,applescript,cocoa-scripting,Applescript,Cocoa Scripting,将脚本能力添加到我的Mac应用程序中,我想知道是否可以从我的应用程序调用脚本端的处理程序。如果是这样的话,这是如何工作的 据我所知,处理程序类似于函数(如“运行时”),可以由脚本自身代码之外的事件调用。Sdef文件理解event标记,因为我可以使用。但是我在Cocoa脚本指南中找不到任何关于这方面的文档 我的应用程序记录了剪贴板,所以我想知道是否可以让正在运行的脚本知道已记录了新的剪贴板,以便脚本可以对其进行操作 现在,与其调用我为此类事件定位、加载和运行的单独(独立)脚本,不如让用户持续运行一
event
标记,因为我可以使用。但是我在Cocoa脚本指南中找不到任何关于这方面的文档
我的应用程序记录了剪贴板,所以我想知道是否可以让正在运行的脚本知道已记录了新的剪贴板,以便脚本可以对其进行操作
现在,与其调用我为此类事件定位、加载和运行的单独(独立)脚本,不如让用户持续运行一个脚本,声明我的应用程序随后调用的事件。(这是否真的是一个好主意不应该在这里讨论,我只是用这个例子来理解AppleScript事件。)
可能吗?如果没有,sdef中的事件条目的用途是什么
更新:这里介绍了AppleScript中的处理程序:实现AppleScript事件处理程序的困难在于应用程序必须具有对脚本的永久引用 例如,在Finder、Messages、Mail中处理事件处理程序的脚本必须在目标应用程序中注册,以保留对脚本的引用 当脚本实现其中一个提供的事件处理程序时,目标应用程序将使用
initWithEventClass:kHandlerEventClass
eventID:kEventID
targetDescriptor:kEventTargetDescriptor
returnID:kAutoGenerateReturnID // predefined constant in CarbonCore.h
transactionID:kAnyTransactionID]; // predefined constant in CarbonCore.h
包括参数的子描述符,并通过目标脚本引用上的executeapleevent
发送
是sdef文件(“EfgH”)中8个字符代码的至少4个有效位kEventID
是sdef文件(“abcD”)中8个字符代码的最高位kHandlerEventClass
是一个kEventTargetDescriptor
,将客户端或目标应用程序表示为返回地址NSAppleEventDescriptor
<event name="did appear something" code="abcDEfgH" description="This handler is called when something appears.">
<direct-parameter description="The names of the appeared something.">
<type type="text" list="yes"/>
</direct-parameter>
<parameter name="with result" code="smTS" description="A record of some information about the names" type="something reply"/>
</event>
是一个文本列表名称
是一种自定义记录类型theResult
something reply
NSAppleScript
运行脚本和将Apple事件发送到sdef文件中定义的处理程序是两件完全不同的事情。这取决于目标应用程序是否需要直接(单向)或使用类似于库的脚本(双向)通知脚本某个特定事件。还有第三种方法可以将NSAppleScriptTask
与位于指定的应用程序脚本
文件夹中的脚本一起使用。我无法理解您的答案。我知道NSAppleScript和NSAppleScript任务。我两者都用。后者总是运行默认处理程序(在运行时),而前者允许我通过executeAppleEvent调用其他处理程序。没问题。但这不是我想问的。抱歉说不清楚,但我不知道你是误解了我还是我误解了你。你回答的前两句话听起来更复杂了,因此我提出了后续问题。如果我只需要让用户选择一个脚本文件,然后用NSAppleScript加载它,那么这很简单。我刚刚回答了如何使用sdef文件中定义的AppleEvents的问题NSAppleScript
是另外一种东西:它只用于运行脚本(从文本字符串源或从磁盘加载)NSUserAppleScript Task
(我忘了User
)与NSAppleScript
非常相似–最大的区别在于,您无法从文本字符串编译和运行脚本,另一方面,您可以在沙盒应用程序中运行脚本,而不受任何限制和特定的Apple Events权限。
on did appear something theNames with result theResult