これは Windows で実行XGrabKey
でき、X11 で使用できることはわかっていますが、Mac OS X ではどうでしょうか? アプリケーション ウィンドウがアクティブでない場合でも呼び出すことができるショートカット キーを設定できるクラスを作成したいと考えています。
2 に答える
これは (まだ?) Cocoa ではサポートされていません。これには古い Carbon ライブラリ (64 ビット互換) を引き続き使用できますが、残念ながら Apple はこの件に関するすべてのドキュメントを削除することにしました。
ここに素敵なブログ記事があります: http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/
この記事は私の好みでは少し長いので、短いバージョンを以下に示します。
- (id)init {
self = [super init];
if (self) {
EventHotKeyRef hotKeyRef;
EventHotKeyID hotKeyId;
EventTypeSpec eventType;
eventType.eventClass = kEventClassKeyboard;
eventType.eventKind = kEventHotKeyPressed;
InstallApplicationEventHandler(&mbHotKeyHandler, 1, &eventType, NULL, NULL);
hotKeyId.signature = 'hotk';
hotKeyId.id = 1337;
RegisterEventHotKey(kVK_ANSI_C, cmdKey + shiftKey, hotKeyCopyId, GetApplicationEventTarget(), 0, &hotKeyRef);
}
}
OSStatus mbHotKeyHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) {
// Your hotkey was pressed!
return noErr;
}
ホットキーが通話に登録されRegisterEventHotKey(…)
ます。この場合、CMD + Shift + C を登録します。
ANSI キーは HIToolbox/Events.h で定義されているため、他のキーを探すことができます (XCode で CMD + Shift + O を押し、Events.h と入力して検索します)。
複数のホットキーが必要な場合、またはハンドラーからメソッドを呼び出したい場合は、もう少し作業を行う必要がありますが、それはすべてこの回答の上部にあるリンクにあります。
この質問に対する簡単な答えを探していたので、これが他の誰かに役立つことを願っています...
addGlobalMonitorForEventsMatchingMask:handler:
のクラスメソッドを見てくださいNSEvent
。また、ショートカット レコーダーが便利な場合もあります。