让我的Cocoa应用程序响应键盘播放/暂停键?

Mos*_*she 11 keyboard macos events cocoa objective-c

有没有办法让我的应用程序响应Mac上的播放/暂停按钮?

编辑:

使用建议的代码,我收到此控制台消息:

无法将操作buttonPressed:连接到NSApplication类的目标

那为什么会这样?

Jos*_*zzi 16

我通过继承NSApplication(并将app的主要类设置为此子类)在我自己的应用程序中完成了这个.它捕获搜索和播放/暂停键,并将其转换为我的应用代表中的特定操作.

相关专线:

#import <IOKit/hidsystem/ev_keymap.h>

- (void)sendEvent:(NSEvent *)event
{
    // Catch media key events
    if ([event type] == NSSystemDefined && [event subtype] == 8)
    {
        int keyCode = (([event data1] & 0xFFFF0000) >> 16);
        int keyFlags = ([event data1] & 0x0000FFFF);
        int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA;

        // Process the media key event and return
        [self mediaKeyEvent:keyCode state:keyState];
        return;
    }

    // Continue on to super
    [super sendEvent:event];
}

- (void)mediaKeyEvent:(int)key state:(BOOL)state
{
    switch (key)
    {
        // Play pressed
        case NX_KEYTYPE_PLAY:
            if (state == NO)
                [(TSAppController *)[self delegate] togglePlayPause:self];
            break;

        // Rewind
        case NX_KEYTYPE_FAST:
            if (state == YES)
                [(TSAppController *)[self delegate] seekForward:self];
            break;

        // Previous
        case NX_KEYTYPE_REWIND:
            if (state == YES)
                [(TSAppController *)[self delegate] seekBack:self];
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我能够让这个工作,但我仍然有一个问题,iTunes启动,并在按键时仍然播放/暂停.这个问题有方法解决吗? (7认同)
  • 只是为了使帖子更新:Swift中提供了相同的代码(并且与Swift 2兼容,经过测试)[这里](http://stackoverflow.com/questions/32499676/capture-osx-media-control-buttons-in -迅速) (2认同)