Cocoa NSStatusBar全局热键

Cocoa NSStatusBar全局热键,cocoa,hotkeys,Cocoa,Hotkeys,我已经创建了一个位于系统状态栏中的NSStatusBar cocoa应用程序 我想指定一个热键,以便按下它时切换我的应用程序并显示菜单 这可能吗?在我的搜索和实验中,我发现了几种分配全局热键的不同方法,当你的应用程序在后台时可以按下这些热键,但我找不到任何有问题的方法来显示菜单 这可能吗?如果有人认为分配全局热键的方法是最好的,请发布它 谢谢 我找到的一个热键教程是为任何感兴趣的人提供的。如果你的目标是10.6+,那么有一些新的API用于NSEvent可以实现全局热键。有关更多信息,请查看这篇

我已经创建了一个位于系统状态栏中的NSStatusBar cocoa应用程序

我想指定一个热键,以便按下它时切换我的应用程序并显示菜单

这可能吗?在我的搜索和实验中,我发现了几种分配全局热键的不同方法,当你的应用程序在后台时可以按下这些热键,但我找不到任何有问题的方法来显示菜单

这可能吗?如果有人认为分配全局热键的方法是最好的,请发布它

谢谢



我找到的一个热键教程是为任何感兴趣的人提供的。

如果你的目标是10.6+,那么有一些新的API用于
NSEvent
可以实现全局热键。有关更多信息,请查看这篇精彩的博文:

编辑(很久以后)

有点自吹自擂:我永远无法让PTHotKey和其他库按我所期望的方式工作,所以我最终放弃了,编写了自己的热键包装器。它有一个非常简单的API(给它一个关键代码、修饰符、目标和动作),甚至支持10.6的块之类的有趣的东西。您可以在此处下载源代码:

有,它仍然存在于Snow Leopard中,并提供64位版本。它是专门为此而设计的,与NSEvent方法不同,后者本质上只是围绕CGEventTaps的基于块的包装器


不同之处在于,NSEvent方法(或CGEventTaps直接)使您可以查看传入的每个事件,而热键API仅在用户按下热键时调用您的函数。

除非单击或“撕下”,否则没有理由显示菜单。谢谢,这很好,你知道可以通过代码弹出应用程序菜单吗?克雷格:可以。请看Dave DeLong对其答案的评论。JFYI:现在苹果公司将此方法标记为过时,因此不应再使用这些方法。谢谢你的博客文章,它工作得很好,但我想我会使用另一个例子,使其在10.5中也能工作。你知道是否可以通过代码弹出应用程序菜单吗?@Craig you can Do
[myStatusItem popUpStatusItemMenu:[myStatusItem menu]
,但这不会突出显示您的statusitem(它是跛脚的)。我唯一建议的另一件事可能是在statusitem上假装单击。现在,它会将您带到一个已驻留的域。@Kiamaluno:对热键使用NSEvent事件监视器方法并没有那么好,因为您获得每个键事件,并且必须自己匹配键。最好使用Carbon事件(请参见我的答案)或者是其中一个包装,比如DDHotKey。@PeterHosey我指的是这个答案中使用的链接,现在已经不适用于任何地方了。