如何在Mac OS X中访问(监听)多媒体键(播放/暂停)?

时间:2020-03-06 14:32:14  来源:igfitidea点击:

我想编写一个Songbird扩展程序,绑定所有Apple Mac OS X平台上可用的多媒体密钥。不幸的是,这不是一个简单的谷歌搜索,我找不到任何文档。

谁能指出我访问这些密钥的资源或者告诉我该怎么做?

我拥有丰富的编程经验,但这将是我第一次在MacOSX和XUL(Firefox等)中进行编码,因此欢迎我们使用任何一种技巧。

请注意,这些不是常规的关键事件。我假设它必须是我需要挂钩或者订阅的另一种类型的系统事件。

解决方案

如果我们想了解多媒体按键正在发送哪些代码,xev可能会为我们提供帮助。

我们确定多媒体密钥在安装中正常工作吗?每个密钥都会生成一个扫描代码,内核会将该扫描代码转换为密钥代码。如果xev没有显示任何键码,我猜这些扫描码没有被映射,因此内核不知道它们。

http://gentoo-wiki.com/HOWTO_Use_Multimedia_Keys很好地说明了查找键码的方法,并提供了有关如何找到原始扫描码并将其转换为键码的帮助。

这篇博客文章有一个解决方案:

http://www.rogueamoeba.com/utm/posts/Article/mediaKeys-2007-09-29-17-00.html

基本上,我们需要将NSApplication子类化,并覆盖sendEvent,
寻找特殊的扫描代码。我不知道什么是鸣鸟,但如果是
不是真正的应用程序,那么我怀疑我们将能够做到这一点。

或者,也许我们可​​以,一个简单的类别就足够了:

@implementation NSApplication(WantMediaKeysCategoryKBye)
- (void)sendEvent: (NSEvent*)event
{
    // intercept media keys here
}
@end