グローバルホットキーはDDHotKeyを使ってきましたが、
ショートカットキーラウンチャー その3(DDHotKey) | MacFeeling Blog
今回はMASShortcutを使ってみることに
環境
macOS Monterey 12.6
Xcode 13.4.1
インターフェース: Storyboard
使用言語:Swift
最初Swift Package Managerで導入しようとしたら、私の環境ではエラーが出てしまったので、ソースコードをビルドして、MASShortcut.frameworkをプロジェクトに追加しました。
Xcodeのプロジェクトに追加したら、File » New » FileでHeader Fileを選択、名前は「Bridging-Header.h」にしてください。
追加した、「Bridging-Header.h」に、以下の#import文2行を追加してください。
#ifndef Bridging_Header_h
#define Bridging_Header_h
#import <Cocoa/Cocoa.h>
#import <MASShortcut/Shortcut.h>
#endif /* Bridging_Header_h */
グローバルホットキーの設定部分を作成
ウインドウにCustom Viewを設置して、ClassにMASShortcutViewを設定
swiftファイル(例ではViewControler.swift)に、import MASShortcutと
@IBOutlet weak var shortcutKeyView: MASShortcutView!を追加
@IBOutlet を設置したCustomViewに繋げます
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
// Pick a preference key to store the shortcut between launches
let kPreferenceGlobalShortcut = "GlobalShortcut"
// Associate the shortcut view with user defaults
self.shortcutKeyView.associatedUserDefaultsKey = kPreferenceGlobalShortcut
MASShortcutBinder.shared().bindShortcut(withDefaultsKey: kPreferenceGlobalShortcut, toAction: {
print("設定したグローバルキーが押された")
})
}
複数のMASShortcutViewを設置するには、kPreferenceGlobalShortcutの値を変えればいいみたいです。
例えば1つ目が”GlobalShortcut”で、2つ目が”GlobalShortcut2″のような感じ
@IBOutlet weak var shortcutKeyView: MASShortcutView!
@IBOutlet weak var shortcutKey2View: MASShortcutView!
//1つ目
let kPreferenceGlobalShortcut = "GlobalShortcut"
self.shortcutKeyView.associatedUserDefaultsKey = kPreferenceGlobalShortcut
MASShortcutBinder.shared().bindShortcut(withDefaultsKey: kPreferenceGlobalShortcut, toAction: {
print("設定したグローバルキーが押された")
})
//2つ目
let kPreferenceGlobal2Shortcut = "GlobalShortcut2"
self.shortcutKey2View.associatedUserDefaultsKey = kPreferenceGlobal2Shortcut
MASShortcutBinder.shared().bindShortcut(withDefaultsKey: kPreferenceGlobal2Shortcut, toAction: {
print("設定したグローバルキー2が押された")
})
通常は、グローバルキーの設定は、設定画面で行うと思うので、その場合は設定画面の方では以下のようにして
import Cocoa
import MASShortcut
class PreferenceViewController: NSViewController {
@IBOutlet weak var shortcutKeyView: MASShortcutView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let kPreferenceGlobalShortcut = "GlobalShortcut"
self.shortcutKeyView.associatedUserDefaultsKey = kPreferenceGlobalShortcut
}
例えば、AppDelegate.swiftの方に、以下のようにするといいかもしれません。
import Cocoa
import MASShortcut
@main
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
let kPreferenceGlobalShortcut = "GlobalShortcut"
MASShortcutBinder.shared().bindShortcut(withDefaultsKey: kPreferenceGlobalShortcut, toAction: {
print("設定したグローバルキーが押された")
})
}
番外編
使用するグローバルホットキーが固定されていて、手動で登録を行う場合は
例えば、「コマンド+シフト+K」なら
//グローバルホットキーを設定する
let shortcut = MASShortcut(keyCode: kVK_ANSI_K, modifierFlags: [.command, .shift])
//グローバルホットキーを登録、キーが押されると
MASShortcutMonitor.shared()?.register(shortcut, withAction: {
print("キーが押されました。")
})
//アプリを終了する際に登録を解除する
MASShortcutMonitor.shared()?.unregisterShortcut(shortcut)
コメント