gpt4 book ai didi

cocoa - 监听Mac键盘播放/暂停事件

转载 作者:行者123 更新时间:2023-12-03 16:07:40 24 4
gpt4 key购买 nike

某些 Mac 应用程序(例如 iTunes 和 Spotify)会对某些 Apple 键盘上的播放/暂停/下一个/上一个按钮使用react。

大概他们正在利用某种 NSNotification,我该如何做同样的事情?

最佳答案

我通过使用以下内容子类化 NSApplication(并将该类设置为目标信息中的应用程序类)来实现此目的:

#import <IOKit/hidsystem/ev_keymap.h>

...

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

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

// RW pressed
case NX_KEYTYPE_REWIND:
if (state == YES)
[(TSAppController *)[self delegate] seekBack:self];
break;
}
}

- (void)sendEvent:(NSEvent *)event
{
// Catch media key events
if ([event type] == NSSystemDefined && [event subtype] == NX_SUBTYPE_AUX_CONTROL_BUTTONS)
{
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];
}

-mediaKeyEvent:state: 中的“状态”用于向上/向下。在我的应用程序中,仅在播放/暂停键备份(按下完成)时对其使用react是有意义的,但当按键按下进行查找时,我会不断对 RW/FF 事件使用react。

不过,我很想知道是否有更好的方法来做到这一点。目前,除非用户在全局键盘快捷键中禁用这些键,否则它会控制我的应用程序和 iTunes。 :-)

这段代码在我的 transcription app 中已经使用了一段时间了。并且运行良好(除了上面的全局键盘快捷键问题)。

关于cocoa - 监听Mac键盘播放/暂停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com