5

Cocoaアプリでは、通常Cmd-Tabで起動されるアプリスイッチャーや、通常Cmd-Spaceで起動されるスポットライトなどのシステムイベントをキャッチする方法を見つけようとしています。重要なイベントをキャッチする方法、またはそれらのイベントの1つが発生しようとしていることを通知し、理想的にはそれをキャンセルする別の方法を探しています。

Apple Screen Sharingリモートデスクトップアプリがそれを行うので、それは可能であるはずです。それらのイベントをキャッチし、接続されたリモートコンピューターに送信します。

これが私がすでに試したことです:

  • NSApplicationのsendEventメソッドを使用してイベントをキャッチします。Cmdキーダウン、Tabキーダウンなどのすべてのイベントが表示されますが、両方を押しても何も表示されません。
  • カーボンホットキーリスナーの登録。Cmd + Qのようなものは何でも登録できますが、Cmd + Tabを登録すると、応答しません。

他のアイデアはありますか?

4

3 に答える 3

2

イベントタップを参照してください。

于 2011-06-02T19:34:50.187 に答える
2

それを見つけた!WindowViewController.mファイル内

#import <Carbon/Carbon.h>

void *oldHotKeyMode;

- (void)windowDidBecomeKey:(NSNotification *)notification{
    oldHotKeyMode = PushSymbolicHotKeyMode(kHIHotKeyModeAllDisabled);
}
- (void)windowDidResignKey:(NSNotification *)notification{
    PopSymbolicHotKeyMode(oldHotKeyMode);
}

これはかなり魔法です!MacAppStoreの新しいAppleサンドボックス要件に合格します。

于 2011-09-27T15:46:53.363 に答える
1

cmd+tabをキャッチする方法を説明します。ただし、これはフルスクリーンモードでのみ機能することに注意してください。ウィンドウモードではこれを行う方法はないと思います。コードは非常に単純です。これはSDLmacコードのマイナーな修正です-フルスクリーンモードでcmd+tabを処理するための更新。

NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask 
    untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ];
    if ( event == nil ) {
        break;
    }
if (([event type] == NSKeyDown) && 
    ([event modifierFlags] & NSCommandKeyMask)
 &&([[event characters] characterAtIndex:0] == '\t')
{
     do something here
}
于 2011-06-27T20:43:34.473 に答える