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

问题描述 投票:0回答:3

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 时系统都会发出蜂鸣声,并且active应用程序不响应此按键事件。

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

cocoa keyboard osx-snow-leopard shortcut hotkeys
3个回答
3
投票

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

[NSApp activateIgnoringOtherApps:YES];

否则,事件将传递到当前活动的应用程序(将发出蜂鸣声)。

编辑:看起来这行不通。

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

所以 Snow Leopard 的新

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


3
投票

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


0
投票

在我用 C++ 开发的桌面应用程序中,当我使用 Ctrl + X 时,我会收到消息蜂鸣声,但我不想要这种蜂鸣声。此外,当我使用 Ctrl + Shift + X 时,我的对话框将打开,并且我再次听到消息蜂鸣声。我想抑制或禁用消息蜂鸣声。我怎样才能做到这一点?

© www.soinside.com 2019 - 2024. All rights reserved.