Cocoa全局快捷键?

13

我想为我的应用程序创建一个全局快捷键。我已经使用了addGlobalMonitorForEventsMatchingMask方法来实现“新的酷炫方式”。问题是,我的事件没有被“消耗掉”:我的快捷键包括空格键,所以每当我在Finder中使用快捷键时,Quicklook就会弹出。

我该如何防止这种情况发生?我知道这是可能的,因为许多应用程序,例如Bowtie iTunes控制器应用程序,都可以做到。

2个回答

10

addGlobalMonitorForEventsMatchingMask:不适合作为现有Carbon快捷键API的替代品,原因有很多;首先它非常低效。从文档中可以看到:

... 您只能观察事件;无法修改或阻止事件被传递给其原始目标应用程序。

并且还有:

如果启用了辅助功能或您的应用程序受信任以获取辅助功能访问权限,则仅可以监视与键相关的事件

在OS X中,Hotkey API仍然是实现全局快捷键的唯一途径。但与许多Carbon API不同,Hotkey API可用于64位应用程序。


我有点担心,因为随着64位转换,Carbon将很快无法使用。 - user187676

7

据我所知,那是唯一的全局热键 API。如果您不喜欢看函数调用之类的东西,请随意编写一个包装 HIToolbox 调用的 Objective-C 方法。 - Chuck
2
已经有一个用于热键API的Cocoa封装器:http://github.com/carpeaqua/SGHotKeysLib - Peter Hosey
1
以上链接已经不存在,现在的包装器是:https://github.com/davedelong/DDHotKey - Martin Marconcini
这个答案中的链接已经失效了,这正是你应该添加支持你答案的代码的原因。 - Kane Cheshire
在2016年是否有更好的解决方案?也许不是基于Carbon的? - mirap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接