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

Posted

技术标签:

【中文标题】如果在其他应用程序中按下全局键盘快捷键,如何防止发出哔声?【英文标题】:How to prevent a Beep sound if global keyboard shortcut is pressed in the other application? 【发布时间】:2010-12-25 05:33:58 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

[NSApp activateIgnoringOtherApps:YES];

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

编辑:看起来这行不通。

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

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

【讨论】:

它一直在响 :) 你能提供几行代码吗?谢谢! 感谢您的补充,达伦。我将您的答案标记为正确的答案。当之无愧:)【参考方案2】:

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

【讨论】:

以上是关于如果在其他应用程序中按下全局键盘快捷键,如何防止发出哔声?的主要内容,如果未能解决你的问题,请参考以下文章

防止在本机反应中按下 TextInput 时显示系统键盘

C#如何全局禁用键盘的回车键

winform 按键触发button事件

非活动应用程序的键盘快捷键

C#:如何在文本框中按下输入触发按钮,但仍允许“Ctrl + A”等快捷方式通过?

如何防止在android片段中按下后退按钮时调用onCreateView