Objective-C/Cocoa(Mac)にグローバルホットキーを登録する方法を教えてください。登録ホットキー
例えば、私が登録したいホットキーがAltキーだろう - Cmdを - D
任意の助けいただければ幸いです!
Objective-C/Cocoa(Mac)にグローバルホットキーを登録する方法を教えてください。登録ホットキー
例えば、私が登録したいホットキーがAltキーだろう - Cmdを - D
任意の助けいただければ幸いです!
GitHubに必要なCarbon機能用の便利なCocoaラッパーがあります:JFHotkeyManagerです。また、新しい(10.6以降)NSEvent API addGlobalMonitorForEventsMatchingMask:handler:
を使用することもできますが、補助デバイスへのアクセスが有効になっている場合にのみキーイベントを取得します。
Wowza ... [hkm bind:@ "alt command d"ターゲット:自己アクション:@selector(show :)]のようなNSStringsも必要です。 。 =) –
Carbonフレームワークの関数InstallApplicationEventHandler
とRegisterEventHotKey
を使用します。このblog postはかなり良いハウツーを提供しています(これは私がこのようなことを考え出すときに使用したものです)。
私はあなたが行くここ
あなたは、あなたがそのコードで使ったAPIについて説明してください。補助デバイスが有効になっていないのに苦労しているときに 'addGlobalMonitor'を使用しようとしているようです。補助デバイスが有効になっていないときは、 'CGEventTap'オプションがありますか? – Noitidart
@Noitidartあなたはそれを理解しましたか?私はしなかったので。私はなぜ誰かがそれを使用する方法を説明することなく、いくつかの仕事を楽しいものにする良いラッパーを書く時間を費やすのだろうかと思っています。 – user3496846
完全にあなたに同意します@ user3496846 - うまくいけば、CGメソッドとobjcメソッドの両方がアクセス可能で制限されています。ホットキーを登録するには、CarbonメソッドRegisterHotKey - https://developer.apple.comを使用する必要があります。 /legacy/library/documentation/Carbon/Reference/CarbonFrameworkReference/index.html#//apple_ref/doc/uid/TP40004336 – Noitidart
...これを簡単に多くの一体にするラッパークラスを書いた:
太字は...私たちは、そのためのタグを持っている理由#import <Carbon/Carbon.h>
EventHandlerUPP hotKeyFunction;
pascal OSStatus hotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent, void *userData)
{
FooBar *obj = userData;
[obj foo];
return noErr;
}
@implementation FooBar
- (id)init
{
self = [super init];
if (self) {
//handler
hotKeyFunction = NewEventHandlerUPP(hotKeyHandler);
EventTypeSpec eventType;
eventType.eventClass = kEventClassKeyboard;
eventType.eventKind = kEventHotKeyReleased;
InstallApplicationEventHandler(hotKeyFunction,1,&eventType,self,NULL);
//hotkey
UInt32 keyCode = 80; //F19
EventHotKeyRef theRef = NULL;
EventHotKeyID keyID;
keyID.signature = 'FOO '; //arbitrary string
keyID.id = 1;
RegisterEventHotKey(keyCode,0,keyID,GetApplicationEventTarget(),0,&theRef);
}
return self;
}
- (void)foo
{
}
@end
完璧に作業しました! – atomikpanda
;) – nacho4d
「alt-D」をグローバルに使用することは、通常は有効な文字(∂)を生成し、他のアプリケーション(Safariのアクセスキーの例です)で既に定義されている可能性があるため、また、一般的なMacユーザーは、ショートカットの修飾キーとして少なくとも「cmd」を持つことが予想されます。 – Asmus
@Asmus:+1、理想的には "ホットキー"もユーザーが設定可能である必要があります。 –