为了存储对象的外部(外部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编写.这是什么秘密?
Script Debugger的作者Mark Alldritt非常善意向我解释这个"秘密".
Script Debugger使用一些特殊的AppleScript API函数(包括OSAGetPropertyNames())来获取此信息.
因此,如果我在例如C中编写包装器,我也可能会这样做.
更新
Cocoa Scripting API有一个专用的类(NSScriptSuiteRegistry和NSScriptClassDescription) - 框架通过读取应用程序的脚本定义(.sdef)文件来构建此信息.这样,所有可用的类及其属性都可以很容易地学习.
Script Debugger是Applescript,只是在它周围放置了一堆编程工具。但“描述符类型不匹配”确实不应该进入其中。你能展示一下你的代码吗,因为这在脚本编辑器中运行得很好:
\n\ntell application "Finder"\n set theFile to choose file\n get properties of theFile -- the "return" keyword also works here as well\nend tell\nRun Code Online (Sandbox Code Playgroud)\n\n不同的应用程序会有不同的行为,但如果没有示例代码,就无法明确地说出太多的变化。
\n\n根据评论和更新的问题进行更新: \n同样,不同的应用程序的行为不同。应用程序实际上必须有一个properties属性才能将记录返回给您(尽管有时这与可以从对象获取的其他信息不同)。item通常,在大多数情况下,这是在根类\xe2\x80\x94 上实现的;iTunes 不允许这样做。即使是脚本调试器也无法解决这个问题。
| 归档时间: |
|
| 查看次数: |
24340 次 |
| 最近记录: |