0

Mac OS X 10.6 — 可可

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

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

每次我使用全局快捷方式时,有什么方法可以防止活动应用程序发出哔哔声?

4

2 回答 2

3

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

[NSApp activateIgnoringOtherApps:YES];

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

编辑:看起来这行不通。

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

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

于 2009-12-10T20:45:43.597 回答
2

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

于 2009-12-10T18:05:08.477 回答