问题标签 [scripting-bridge]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2029 浏览

c - 其值似乎是字符串的枚举类型是什么?

我正在使用 Apple 的ScriptingBridge框架,并为 iTunes 生成了一个头文件,其中包含enum如下几个 s:

我的理解是enum值必须是整数,但这个定义似乎违反了该规则。此外,似乎将这些enum值视为整数(NSPredicate例如在 an 中)并没有做正确的事情。

我将enum上面的声明添加到具有空main函数的 C 文件中,并使用i686-apple-darwin9-gcc-4.0.1. 因此,虽然这些类型的enums 可能不符合 C 标准(正如 Parappa 在下面指出的那样),但它们至少被gcc编译为某种类型。

那么,该类型是什么,我该如何使用它,例如,在格式字符串中?

0 投票
2 回答
389 浏览

c - 在 C 中使用 Apple Scripting Bridge

我想知道是否可以在 C 中使用 Scripting Bridge(如此所述)。我想要做的是控制和/或从 Apple 应用程序(例如 iTunes,请参阅上面的链接列表 2.1 和 2.2)中获取信息链接)使用Objective-C相当容易。

我可以使用 C 在 Objective-C 中编写这些部分,但这会变得非常复杂,并且更喜欢完整的 C 方法。

0 投票
5 回答
3971 浏览

cocoa - 使用脚本桥创建 iTunes 播放列表

我正在尝试使用可可脚本桥创建一个新的用户播放列表,但似乎无法使其正常工作。我到目前为止:

当我尝试为播放列表添加名称时,我收到错误消息:

iTunesBridge[630:80f] *** -[SBProxyByClass setName:]:对象尚未添加到容器中;选择器无法识别

谁能指出我正确的方向?

0 投票
3 回答
14834 浏览

scripting - 如何使用 AppleScript 关闭 Safari 中的所有或仅部分选项卡?

我制作了一个非常简单的 AppleScript 来关闭 Safari 中的选项卡。问题是,它有效,但不完全有效。只关闭了几个选项卡。这是代码:

我也试过这个脚本:

...但它也不起作用(相同的行为)。

我在我的系统(2008 年 1 月的 MacBook Pro)以及 Tiger 下的 Mac Pro G5 上进行了尝试,但脚本在两者上都失败了,尽管 Tiger 上的描述性错误要少得多。

运行脚本几次每次都会关闭几个选项卡,直到没有留下任何选项卡,但在关闭几个选项卡后总是失败并出现相同的错误。在 Leopard 下,我得到一个越界错误。由于我使用的是快速枚举(不使用“从 0 到 Windows 中的项目数重复”),所以我不知道如何获得越界错误...

我的目标是使用 Cocoa Scripting Bridge 从我的 Objective-C Cocoa 应用程序中关闭 Safari 中的选项卡,但 Scripting Bridge 以同样的方式失败。不可删除的选项卡显示NULL在 Xcode 调试器中,而其他选项卡是有效对象,我可以从中获取值(例如它们的标题)。事实上,我首先尝试了 Scripting Bridge,然后告诉自己为什么不直接在 AppleScript 中尝试,我很惊讶地看到了相同的结果。

我必须有一个明显的遗漏或那里的东西......(对我来说,这似乎是Safari AppleScript支持中的一个错误......:S)我使用重复循环和Obj-C 2.0快速枚举来迭代集合之前为零问题,所以我真的看不出这里有什么问题。

任何人都可以帮忙吗?

提前致谢!

0 投票
1 回答
578 浏览

cocoa - 如何使用 Perl 的 OS-X ScriptingBridge 框架关闭窗口?

问题...

由于64 位 perl 不再支持 MacPerl,我正在尝试使用替代框架来控制 Terminal.app。

我正在尝试ScriptingBridge,但遇到了将枚举字符串传递给closeSaving使用PerlObjCBridge的方法的问题。

我想打电话:

尝试解决方案...

我努力了:

如您所见,我对如何传递枚举字符串的所有猜测都失败了。

在你给我发火之前...

  • 我知道我可以使用另一种语言(ruby、python、cocoa)来执行此操作,但这需要翻译其余代码。
  • 我也许可以使用CamelBones,但我不想假设我的用户已经安装了它。
  • 我也可以使用 NSAppleScript 框架(假设我费尽心思找到了 Tab 和 Window ID),但仅仅为了这个调用就不得不求助于它似乎很奇怪。
0 投票
2 回答
643 浏览

cocoa - Scripting Bridge 在 10.5 上的 iTunes 中创建新播放列表时生成错误,但不是 10.6

我在 10.5 中遇到了 Scripting Bridge 框架的问题。具体来说,我使用这段代码在 iTunes 中创建一个新的用户播放列表:

此代码在 10.6 中运行良好。播放列表已正确创建,我可以稍后将歌曲添加到其中。

但是,在 10.5 上,会生成错误:

为什么?

0 投票
2 回答
642 浏览

objective-c - ScriptingBridge 导致 iTunes 在退出后重新启动

我正在开发一个 Cocoa 应用程序来监控您在 iTunes 中收听的内容,并且由于我的目标是 Mac OS 10.5 及更高版本,因此我决定使用Scripting Bridge

如果我尝试关闭 iTunes 太接近我的应用程序轮询当前曲目的时间,iTunes 将立即重新启动!可靠地防止这种行为的唯一方法是先退出我的应用程序,然后退出 iTunes。

切换到EyeTunes解决了这个问题,但它是一个相当老的代码库,我希望我可以在没有外部库的情况下完成这个。当然我做错了什么导致重新启动?

这是一些示例代码;此代码段每隔几秒运行一次,由NSTimer.

这是 Scripting Bridge 的一个已知问题,还是我使用不正确?

0 投票
3 回答
4629 浏览

cocoa - 如何通过 ScriptingBridge 使用 AppleScript 获取终端窗口的窗口 ID 和选项卡号?

我可以使用以下 AppleScript 打开终端选项卡:

这将返回一个字符串,如:tab 1 of window id 3263 of application "Terminal"。太好了,我可以看到窗口 id 3263和选项卡编号1(尽管我不知道如何查询myTab以仅获取这些值)。

在 Cocoa ScriptingBridge 中,我可以这样做:

如何从选项卡对象中获取窗口 ID 和选项卡编号?


编辑 2009/4/27 - 为什么?

为了回答我为什么要这样做 - 我在终端窗口中打开一个命令(如上),并取回选项卡对象。但是我想移动/调整这个窗口的大小,所以我需要访问选项卡的“窗口”对象。

我正在使用 Objective-C(实际上,是从 Perl 桥接的 Objective-C),并且想坚持使用标准的 OS 组件,所以我相信我只有 NSAppleScript 和 ScriptingBridge 框架可以使用(所有 perl applescript 模块都与 64 位无关碳去除)。我会尝试 NSAppleScript,但处理返回的值似乎是一种黑色艺术。

我当前的解决方案是获取选项卡对象的TTY(保证唯一)并枚举每个窗口的每个选项卡,直到找到包含该选项卡的窗口。我认为这不是最好的方法(肯定不是很快!)。


编辑 2009/4/30 - 解决方案

根据下面“”的建议,我勇敢地使用了NSAppleEventDescriptor API。最初,我只能通过 NSAppleScript 的executeAndReturnError()调用来解决这个问题。但是我发现 NSAppleScript 比 ScriptingBridge 慢得多。

在使用ClassDump提取更多的 SBObject 调用后,我发现了未记录的specifierDescription()qualifiedSpecifier()调用。前者给了我很好的“窗口ID Y的标签X ”字符串。后者返回苹果事件描述符,然后我可以对其进行解码。

我的最终代码(在 perl 中)是:

0 投票
2 回答
1618 浏览

objective-c - 使用 Cocoa Scripting Bridge 创建 iPhoto 相册

我正在努力从 Cocoa 应用程序创建新专辑。在 applescript 中,这是一个很好的简单过程:

但我无法通过 Scripting Bridge 在 Cocoa 中解决这个问题。我试过这个:

但这没有任何效果。

请帮忙!

0 投票
3 回答
2450 浏览

objective-c - 使用 Scripting Bridge 将电影添加到 iTunes

我想使用 Scripting Bridge 将电影添加到 iTunes。最好让我在“音乐视频”和“电影”之间进行选择。我知道 Objective-C 和 AppleScript,所以我认为它不会那么难,但我想不通。我知道我将如何使用 NSAppleScript,但我的目标是 10.5 或更高版本,并阅读了 Scripting Bridge 废弃了 NSAppleScript。那正确吗?

我得到的只是

正如你所看到的,一点也不多。