【问题标题】:Cocoa NSStatusBar Global HotKeyCocoa NSStatusBar 全局热键
【发布时间】:2010-12-12 01:47:49
【问题描述】:

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

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

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

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

谢谢。


我在http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/ 上找到了一个热键教程,供任何感兴趣的人使用。

【问题讨论】:

  • 没有理由显示菜单,除非它被点击或“撕下”。

标签: cocoa hotkeys


【解决方案1】:

如果您的目标是 10.6+,NSEvent 的一些新 API 可以执行全局热键。欲了解更多信息,请查看这篇精彩的博文:http://cocoakids.net/global-hotkeys-in-cocoa-on-snow-leopard

编辑(很久以后)

有点自吹自擂:我永远无法让 PTHotKey 和其他库之类的东西按我期望的方式工作,所以我最终放弃并编写了自己的 HotKey 包装器。它有一个非常简单的 API(你给它一个键码、修饰符、一个目标和一个动作),甚至支持有趣的东西,比如 10.6 的块。你可以在这里下载源码:http://github.com/davedelong/DDHotKey

【讨论】:

  • 感谢您的博文,它工作得很好,但我认为我使用另一个示例,因此它也可以在 10.5 中工作,您知道是否可以通过代码弹出应用程序菜单?
  • @Craig 你可以做[myStatusItem popUpStatusItemMenu:[myStatusItem menu]],虽然这不会突出你的状态项(这是蹩脚的)。我建议的唯一另一件事可能是假点击状态项。
  • cocoakids.net/global-hotkeys-in-cocoa-on-snow-leopard 现在将您带到一个停放的域。
  • @kiamlaluno:无论如何,对热键使用 NSEvent 事件监控器方法并不是那么好,因为您得到 每个 键事件并且必须自己匹配键。最好使用 Carbon 事件(请参阅我的回答)或其中一个包装器,例如 DDHotKey。
  • @PeterHosey 我指的是这个答案中使用的链接,现在没有带到任何地方。
【解决方案2】:

an actual hotkey API,它仍然存在于 Snow Leopard 中,并提供 64 位版本。它是专门为此目的而设计的,与 NSEvent 方法不同,NSEvent 方法本质上只是一个基于块的 CGEventTaps 包装器。

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

【讨论】:

  • 谢谢你,效果很好,你知道是否可以通过代码弹出应用程序菜单吗?
  • 克雷格:是的。请参阅 Dave DeLong 对他的回答的评论。
  • JFYI:现在 Apple 将此方法标记为已过时,因此不应再使用它们
猜你喜欢
  • 2017-04-04
  • 2011-06-30
  • 1970-01-01
  • 2016-02-28
  • 2019-12-07
  • 2016-02-22
  • 2018-05-01
  • 2011-03-15
  • 1970-01-01
相关资源
最近更新 更多