更改iTunes单击以排队而不是播放

时间:2011-08-09 12:54:16

标签: objective-c cocoa itunes

我正在尝试更改iTunes点击歌曲或专辑时的工作方式。我想拦截点击,而不是播放该项目,我希望将该项目添加到某个播放列表中。 我试图通过从NSDistributedNotificationCenter捕获它来拦截点击事件,阻止它传播并执行一个可以添加到播放列表的Apple脚本。 问题是我无法拦截iTunes鼠标点击。你能帮我解决这个问题吗?

非常感谢。

3 个答案:

答案 0 :(得分:4)

我认为最好的解决方法是创建一个 SIMBL插件,这样您就可以访问iTunes(应用程序本身)了,从那里你可以进行方法调整播放按钮触发的动作对您自己的方法有效。

我猜你的问题是,在你的方法中你会执行一个Apple脚本来将所选项目添加到播放列表中。以下是使用AppleScript执行此操作的更多信息:herehere

有关SIMBL check out the website的更多信息,如果您不确定从哪里开始,请查看有关构建SIMBL插件的this tutorial

答案 1 :(得分:2)

我找到了另一种方法来使用NSDistributedNotificationCenter而不是拦截点击。当播放器状态发生变化时,iTunes会发布分布式通知,其中包括按下播放按钮。

您可以订阅这个名为com.apple.iTunes.playerInfo的通知,当您收到它时,您可以看到播放器状态是否正在播放,如果是,您知道该按钮已被按下,从这里您可以运行一些AppleScript暂停/停止播放音乐并执行您想要的操作(例如,将所选歌曲添加到播放列表中)。

通知还提供了许多其他信息,您可以在此处看到:  enter image description here

要订阅通知,请执行以下操作并实施iTunesPlayerStateChanged:方法。

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(iTunesPlayerStateChanged:) name:@"com.apple.iTunes.playerInfo" object:nil];

答案 2 :(得分:1)

一种方法是使用辅助功能API跟踪iTunes窗口/播放按钮的位置,然后安装活动CGEventTap以拦截鼠标点击。如果点击登录iTunes按钮,则可以阻止事件传播到iTunes(通过从事件点击回调中返回NULL)并自行处理。

这相对于SIMBL方法的主要优点是它不依赖于iTunes中的内部实现,因此即使iTunes更新并更改其内部方法/功能,也应继续工作。