如果在其他应用程序中按下全局键盘快捷键,如何防止发出哔声?
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
我正在使用全局事件监视器使用自定义键盘快捷键显示状态项菜单:
此解决方案有效,但每次用户按 F12 并且 active 应用程序没有响应此按键事件时,系统都会发出哔声。
globalEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event)
if ([event keyCode] == kVK_F12)
[self handleGlobalShortcut];
// How to prevent system beep?
];
有什么方法可以防止活动应用程序在我每次使用全局快捷方式时发出哔哔声?
【问题讨论】:
【参考方案1】:在您的事件监视器中,您需要激活您的应用,以便 它 接收关键事件。
[NSApp activateIgnoringOtherApps:YES];
否则,该事件将被传递给当前活动的应用程序(会发出哔声)。
编辑:看起来这行不通。
根据文档“您不能修改或以其他方式阻止将事件传递到其原始目标应用程序”。
所以 Snow Leopard 的新 addGlobalMonitorForEventsMatchingMask
API 不适合处理热键。您将需要继续使用旧的 Carbon RegisterEventHotKey
API。幸运的是,此 API 与 Snow Leopard 上的 64 位 Cocoa 兼容。
【讨论】:
它一直在响 :) 你能提供几行代码吗?谢谢! 感谢您的补充,达伦。我将您的答案标记为正确的答案。当之无愧:)【参考方案2】:似乎不可能。哔哔声是 [NSResponder noResponderFor] 的默认行为。因此,应用程序会发出哔哔声,除非它通过添加最后一个响应者来覆盖该行为,这不太可能从应用程序外部实现。
【讨论】:
以上是关于如果在其他应用程序中按下全局键盘快捷键,如何防止发出哔声?的主要内容,如果未能解决你的问题,请参考以下文章