如果在其他应用程序中按下全局键盘快捷键,如何防止发出哔声?

时间:2009-12-10 12:08:17

标签: cocoa keyboard osx-snow-leopard shortcuts hotkeys

Mac OS X 10.6 - Cocoa

我正在使用全局事件监视器来使用自定义键盘快捷键显示状态项菜单:

globalEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event)
{
    if ([event keyCode] == kVK_F12)
    {
        [self handleGlobalShortcut];
        // How to prevent system beep?
    }
}];
此解决方案正常工作,但每次用户按下F12并且活动应用程序未响应此键事件时,系统会发出蜂鸣声。

有没有办法阻止活动应用程序每次使用全局快捷方式时发出哔哔声?

2 个答案:

答案 0 :(得分:3)

在您的事件监视器中,您需要激活您的应用,以便将收到关键事件。

[NSApp activateIgnoringOtherApps:YES];

否则,该事件将被传递给当前活动的应用程序(将发出哔声)。

编辑:看起来这不起作用。

根据文档“您无法修改或以其他方式阻止将事件传递到其原始目标应用程序”

所以Snow Leopard的新addGlobalMonitorForEventsMatchingMask API不适合处理热键。您需要继续使用旧的Carbon RegisterEventHotKey API。幸运的是,这个API与Snow Leopard上的64位Cocoa兼容。

答案 1 :(得分:2)

似乎不可能。蜂鸣声是[NSResponder noResponderFor]的默认行为。所以应用程序发出蜂鸣声,除非它通过添加最后一个响应者来覆盖该行为,这在应用程序外部是不可能的。