0

keyDownグローバルなイベントを聞き始めました。イベントが発生したアプリケーションから情報を取得する方法はありますか?

ハンドラーはNSNotificationインスタンスを受け取り、NSEventその一部です。どうにかしてそれらのオブジェクトからその情報を抽出できますか?

リスニング スニペット:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event){
    NSLog(@"global keyDown %@", event);
    [[NSNotificationCenter defaultCenter] postNotificationName:kKeyPressed
                                                        object:event];

}];

観察者:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyEventHandler:)
                                             name:kKeyPressed
                                           object:nil];

アップデート

グローバル キー ダウンは、特定のアプリケーションからは送信されません。実際に必要だったのは、イベント ハンドラーで現在アクティブなアプリケーションを確認することです。

[[NSWorkspace sharedWorkspace] activeApplication]

これにより、必要な情報が返さNSDictionaryれます。

4

1 に答える 1

1

分散通知を投稿していないか、分散通知センターを使用していません。これは、通知が現在のアプリケーションからのものであることがわかっていることを意味します。

その間、自分で通知を生成しているので、アプリケーションを知る必要がある場合は、それを追加するだけで済みます.

最後に、埋め込むイベントはグローバル キー イベントであり、アプリケーションが関連付けられていません。特別な場合を除いて、それらはアプリケーションによって生成されるのではなく、ユーザーがキーボードで入力することによって生成されます。

于 2012-11-08T02:25:34.330 に答える