Mac托盘应用的全局快捷键

12

我正在使用Swift 4开发一款只能运行为代理的Mac应用程序(仅在托盘中具有菜单)。我对Swift完全不熟悉。

我希望它能响应键盘快捷键,但基本快捷键(见图片)仅在应用程序处于焦点状态时起作用(在我的情况下,当单击菜单时)。

screenshot

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

我已经尝试过:

  • HotKey,但似乎与Swift 4不兼容,或者我无法使用Swift Package Manager
  • 这个答案,但同样Swift 4会出现几个错误,我解决不了

有人做到了吗?


1
我不确定Swift是如何实现的,但几年前我编写了Objective-C代码来完成这个任务:https://github.com/mdippery/blackout/blob/master/Source/BOApplication.m#L65 我还没有在最新的操作系统上测试过它,但我认为它仍然有效。 - mipadi
我认为HotKey使用类似的API,所以它可能仍然有效。无论如何,我已经解决了我的问题。谢谢。 - foucdeg
2个回答

5

我制作了一个Swift包,使这变得非常容易:

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) {
            // …
        }
    }
}

尽管您已经解决了自己的问题,我认为对于其他遇到相同问题的人来说这可能会有用。 我还建议让用户选择他们自己的键盘快捷键,而不是硬编码它。我的软件包带有一个控件,用户可以设置他们喜欢的快捷键。

5

我最终使用了热键(HotKey)来解决问题:

  • 通过使用Carthage作为软件包管理器,而不是SPM。
  • 不使用HotKey的README中的示例代码,因为对我来说这种方法不起作用。我在他们的示例应用中找到了可行的方法。

现在它非常好用!


你发布过你的应用程序吗?请发布一个链接 - 看起来很有趣! - luckman212
https://apps.apple.com/fr/app/pairprogram/id1323768897?mt=12 - foucdeg

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