实现 AppleScript 事件处理程序的困难在于应用程序必须具有对脚本的永久引用。
例如,在 Finder、Messages、Mail 中处理事件处理程序的脚本必须在目标应用程序中注册,以保留对脚本的引用。
当脚本实现提供的事件处理程序之一时,目标应用程序会创建一个NSAppleEventDescriptor
with
initWithEventClass:kHandlerEventClass
eventID:kEventID
targetDescriptor:kEventTargetDescriptor
returnID:kAutoGenerateReturnID // predefined constant in CarbonCore.h
transactionID:kAnyTransactionID]; // predefined constant in CarbonCore.h
包括参数的子描述符,并通过executeAppleEvent
目标脚本引用发送它。
kEventID
是 sdef 文件 ('EfgH') 中 8 个字符代码的最低 4 个有效位。
kHandlerEventClass
是 sdef 文件 ('abcD') 中 8 个字符代码的最高 4 个有效位。
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>
在 AppleScript 中实现了处理程序
on did appear something theNames with result theResult
theNames
是一个文本列表
theResult
是自定义记录类型something reply