【问题标题】:How to intercept a hot key in Cocoa when the application window is not active当应用程序窗口不活动时如何拦截Cocoa中的热键
【发布时间】:2010-12-27 06:05:44
【问题描述】:

我正在尝试创建一个在执行时不打开窗口的实用程序,并且可以通过热键激活该实用程序;我读到目前 Cocoa 没有相应的功能,我应该使用已弃用的 Carbon 功能。

难道真的没有办法在 Cocoa 中使用全局热键吗?怎么办:等待Cocoa为此引入一个函数,还是使用carbon函数直到Cocoa中没有引入类似的函数?

【问题讨论】:

    标签: objective-c cocoa x86-64 hotkeys


    【解决方案1】:

    使用the Carbon Event Manager's RegisterEventHotKey function此功能在 64 位中受支持(请注意,它缺少“在 64 位中不可用”可用性说明)。

    相反,NSEvent 在 Snow Leopard 中的新 addGlobalMonitorForEventsMatchingMask:handler: 方法不是实现热键的最简单方法。一方面,它要求用户可以访问已打开的辅助设备;此外,它需要您自己检查每个事件,而RegisterEventHotKey 系统仅在用户按下您注册的特定键时才调用您的回调函数。

    【讨论】:

    • 我试图避免将函数用于可能随时被 Apple 声明为不受支持的库。据我所知,Carbon 似乎并没有在不久的将来被弃用,即使 Apple 一直宣称 Carbon 只是一个允许进入 Mac OS X 的库,并且可以随时删除。
      等待 Cocoa 类处理热键是没有意义的,因为该类可能会在 5 年内引入。
    • 苹果从来没有这样说过。 “碳”这个名字的出现是因为“所有生命都基于碳”这一概念。 Cocoa 是一个方便的包装器,而不是任何重要事物的基础。
    • 以典型的 Apple 方式,他们已从其网站上删除了 RegisterEventHotKey 函数的文档。但是,至少有一个示例应用程序 (UIElementInspector) 仍在使用它(在 AppDelegate.m 中),并且它仍然记录在 CarbonEvents.h 头文件中。
    【解决方案2】:

    看看 Shortcut Recorder (http://wafflesoftware.net/shortcut/) 一个框架,它使用 Carbon Event Manager for Global Hotkeys 它还允许您更改用户以更改 HotKey(如果这是您想要的)。

    并查看此项目/代码以了解如何实现它:http://github.com/sdegutis/SDGlobalShortcuts

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2021-04-29
      相关资源
      最近更新 更多