转换为Apple Events AppleScript

时间:2018-12-05 18:43:00

标签: c applescript macos-carbon appleevents

我有一个非常简单的applescript:

tell application "Opera"
   get URL of active tab of window 1
end tell

我想查看Apple Events的基础。因此,我在启用以下两个环境变量的情况下启动了它:

export AEDebugSends=1;
export AEDebugReceives=1

现在我得到以下输出:

osascript browser.scpt 
{core,getd target='psn '[Opera] {----={form=prop,want=prop,seld=URL ,from={form=prop,want=prop,seld=acTa,from={form=indx,want=cwin,seld=1,from=NULL-impl}}}} attr:{csig=65536 returnID=15130}

我希望看到对此处定义的函数的调用:https://developer.apple.com/documentation/coreservices/apple_events?language=objc

我的最终目标是将Applescript转换为c或Obj-C代码。

有人可以帮助我理解输出的含义吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

  

希望看到对此处定义的函数的调用

好吧,别再期待了。您拥有的是Apple事件本身,以AEPrint表示法表示,如下所述:

https://developer.apple.com/library/archive/technotes/tn/tn2045.html

您可以使用它来构造相同的Apple事件,也可以使用更高级别的命令将其分成多个部分。但是无论哪种方式,都没有系统为您编写代码!这是AppleScript为您打造的Apple活动。学习如何阅读AEPrint表示法,学习Apple事件的结构,学习手工构建相同的Apple事件都是您必须要做的事情。

仅举一个您将使用的推理示例:

  • 您的Apple事件以动词coregetd开头。通过从应用程序的SDEF字典中查找,您可以了解到与get(AppleScript中的第一个单词)相同的Apple事件。

  • 好的,现在我们知道动词了;直接的对象是什么?这是一个URL (注意空格,这是四个字母的代码);相当于您的URL的Apple事件(同样,我们通过字典来学习)。

  • 好,但是URL是什么?是URL中的acTa,也就是active tab(同样,字典向我们展示了这种等效性)。

  • 好,但是acTa是什么? ...

以此类推。通过这种方式将Apple事件分解为属性,元素和对象说明符后,您可以通过Carbon或Cocoa命令再次构建它。

出于逃避我的原因,您选择了漫长的旅程。您已选择放弃AppleScript表示法的简单性,并自己构建一个Apple事件。您选择了一条漫长的道路,需要学习很多东西。没有捷径可走。运行时不会为您编写代码。最长的旅程始于第一步。开始!