Objective c 控制macOS触摸栏媒体键

Objective c 控制macOS触摸栏媒体键,objective-c,swift,macos,cocoa,Objective C,Swift,Macos,Cocoa,使用CGEventTap方式,我可以截取应用程序中的媒体键(F7-F9),并阻止iTunes之类的东西打开。但是,有没有办法更改显示的图标?例如,在safari中播放youtube视频或在iTunes中播放音乐时,按钮将根据需要从“播放”更改为“暂停”,但在我的情况下,它仍然是通用的“播放/暂停”按钮 显然有一个API可以实现这一点,但我还没有找到它 编辑:为了澄清,我不是说任何应用程序都可以显示的“应用程序控件”触摸栏;我说的是当在系统首选项中选择“Expanded Control Strip

使用
CGEventTap
方式,我可以截取应用程序中的媒体键(F7-F9),并阻止iTunes之类的东西打开。但是,有没有办法更改显示的图标?例如,在safari中播放youtube视频或在iTunes中播放音乐时,按钮将根据需要从“播放”更改为“暂停”,但在我的情况下,它仍然是通用的“播放/暂停”按钮

显然有一个API可以实现这一点,但我还没有找到它


编辑:为了澄清,我不是说任何应用程序都可以显示的“应用程序控件”触摸栏;我说的是当在系统首选项中选择“Expanded Control Strip”(扩展控制条)时显示的触摸栏,它在所有应用程序中都是全局的。

我找到了解决方案,它是
MPRemoteCommandCenter
。首先,必须设置处理程序:

let remote=MPRemoteCommandCenter.shared()
remote.playCommand.isEnabled=true
remote.playCommand.addTarget{(MPRemoteCommandEvent)->中的MPRemoteCommandHandlerStatus
// ...
}
请注意,根据我的经验,您可能需要为
playCommand
pauseCommand
切换playbausecommand
nextTrackCommand
previousTrackCommand
设置处理程序,才能使其正常工作

然后,要实际更改按钮状态,请使用
mpnowplayingfocenter.default().playbackState
,该状态可以是
。playing
。paused
或其他

然而,在我的例子中,由于我已经通过另一种机制挂接媒体按钮,我上面设置的处理程序什么也不做;他们只需要在那里,让操作系统知道你的应用。设置
playbackState
仍然有效