【问题标题】:Global keyboard shortcuts for a Mac tray appMac 托盘应用程序的全局键盘快捷键
【发布时间】:2017-12-11 19:36:47
【问题描述】:

我正在使用 Swift 4 开发一个 Mac 应用程序,它只作为代理运行(它在托盘中只有一个菜单)。我对 Swift 完全陌生。

我希望它响应键盘快捷键,但基本快捷键(见图)仅在应用程序具有焦点时(在我的情况下,当单击菜单时)才有效。

所以我需要让我的应用响应系统范围的键盘快捷键。

我试过了:

  • HotKey 但它似乎与 Swift 4 不兼容,或者我无法使用 Swift 包管理器
  • this answer 但 Swift 4 再次引发了几个我无法解决的错误

有人做过吗?

【问题讨论】:

  • 我不具体知道它是如何在 Swift 中完成的,但几年前我编写了 Objective-C 代码来做到这一点:github.com/mdippery/blackout/blob/master/Source/…我还没有在最新的操作系统上测试过它,但我认为它是仍然有效。
  • 我认为 HotKey 使用了类似的 API,所以它可能仍然有效。无论如何,我解决了我的问题。谢谢。

标签: swift macos


【解决方案1】:

所以我最终让它与 HotKey 一起使用:

  • 使用 Carthage 作为包管理器而不是 SPM
  • 并且不使用他们自述文件中的 HotKey 示例代码,由于某种原因,这对我不起作用,但他们的 example app 中的那个。

效果很好!

【讨论】:

【解决方案2】:

我创建了一个Swift package,让这一切变得非常简单:

import KeyboardShortcuts

extension KeyboardShortcuts.Name {
    static let startFiveRounds = Self("startFiveRounds", default: .init(.t, modifiers: [.command, .option]))
}

@main
final class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ notification: Notification) {
        KeyboardShortcuts.onKeyUp(for: .startFiveRounds) {
            // …
        }
    }
}

即使你已经解决了你的问题,我认为这对于其他遇到同样问题的人来说可能很有用。

我还建议让用户选择自己的键盘快捷键,而不是硬编码。我的包带有一个控件,用户可以在其中设置他们喜欢的快捷方式。

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多