c - 转换为 Apple 事件 AppleScript

标签 c applescript macos-carbon appleevents

我有一个非常简单的苹果脚本:

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 代码。

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

提前致谢

最佳答案

would expect to see calls to functions defined here

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

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

您可以使用它来构造相同的 Apple 事件,也可以使用更高级别的命令将其分段。但无论哪种方式,系统都不能为您编写代码!这就是 Apple 事件,由 AppleScript 为您构建。学习阅读 AEPrint 符号、学习 Apple 事件的结构、学习手动构建相同的 Apple 事件,这些都是您必须自己做的事情。

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

  • 您的 Apple 事件以动词 coregetd 开头。这是相当于 get(AppleScript 中的第一个单词)的 Apple 事件,您可以通过查看应用程序的 SDEF 字典来了解。

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

  • 好的,但是 URL 是什么?它是 acTaURL,即事件选项卡(字典再次向我们展示了这种等价性)。

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

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

出于我无法理解的原因,你选择踏上一段漫长的旅程。您已选择放弃 AppleScript 表示法的简单性并自行构建 Apple 事件。你选择了一条漫长的道路,需要大量的学习。没有捷径;运行时不会为您编写代码。最长的旅程从第一步开始。开始!

关于c - 转换为 Apple 事件 AppleScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638803/

相关文章:

objective-c - 我可以让此代码与快捷方式记录器一起使用吗?

cocoa - NSMenu 中的替代菜单项

cocoa - 使用辅助功能 API 设置最前面的窗口

python - 在 mac osx 上启动应用程序的多个进程

c - 查看随机序列中的下四个数字(使用 srand 和 rand)

c++ - 将命令行字符串 lpszCmdLine 传递给 C 中的 WM_CREATE

在二叉搜索树中将前序前驱与其后继连接

applescript - 如何在 Automator 中将文件路径传递给 AppleScript?

ios - 在 Xcode 中构建阶段后运行 Applescript

c - 以下程序的控制流程是什么?