AppleScript:获取对象或类的所有属性的列表

Tho*_*ann 8 applescript

为了存储对象的外部(外部AS)访问的值,我需要能够获取该对象的每个属性,然后我会尝试将其强制转换为文本并存储它.

如何获取对象包含的属性列表.举个例子,我可以这样写:

tell me
  get properties
end tell
Run Code Online (Sandbox Code Playgroud)

这适用于脚本对象.

但对于许多其他对象,我只是得到一个错误,如"描述符类型不匹配",如下所示:

tell application "iTunes"
  get properties of file track 1
end tell
Run Code Online (Sandbox Code Playgroud)

现在,我知道优秀的Script Debugger可以做到这一点(它可以显示任何对象的整个属性集),所以它也应该可以用AppleScript编写.这是什么秘密?

Tho*_*ann 9

Script Debugger的作者Mark Alldritt非常善意向我解释这个"秘密".

Script Debugger使用一些特殊的AppleScript API函数(包括OSAGetPropertyNames())来获取此信息.

因此,如果我在例如C中编写包装器,我也可能会这样做.

更新

Cocoa Scripting API有一个专用的类(NSScriptSuiteRegistry和NSScriptClassDescription) - 框架通过读取应用程序的脚本定义(.sdef)文件来构建此信息.这样,所有可用的类及其属性都可以很容易地学习.


Phi*_*gan 6

Script Debugger是Applescript,只是在它周围放置了一堆编程工具。但“描述符类型不匹配”确实不应该进入其中。你能展示一下你的代码吗,因为这在脚本编辑器中运行得很好:

\n\n
tell application "Finder"\n    set theFile to choose file\n    get properties of theFile -- the "return" keyword also works here as well\nend tell\n
Run Code Online (Sandbox Code Playgroud)\n\n

不同的应用程序会有不同的行为,但如果没有示例代码,就无法明确地说出太多的变化。

\n\n

根据评论和更新的问题进行更新: \n同样,不同的应用程序的行为不同。应用程序实际上必须有一个properties属性才能将记录返回给您(尽管有时这与可以从对象获取的其他信息不同)。item通常,在大多数情况下,这是在根类\xe2\x80\x94 上实现的;iTunes 不允许这样做。即使是脚本调试器也无法解决这个问题。

\n