2011-01-05 10 views
2

ウィンドウにフォーカスしないときは、Cocoaでキー値を取得します。 ご存知の方は教えてください。ウィンドウ上のフォーカスに関係なく、ココアでキー値を取得する方法

+0

私はココアでこれを行う方法はわかりませんが、キーボードを直接照会する必要があります。フォーカスがない場合は、プロミスキャスモードのメッセージ傍受がない限り、キーボードのキーストロークメッセージは送信されません。 – EnabrenTane

+0

OSX 10.6では、キーボードイベントをグローバルに登録することができます.Dave DeLongの回答と鉱山を参照してください。 –

答えて

0

私は最近asked this questionを使用し、Dave Delongの示唆したようにaddGlobalMonitorForEventsMatchingMaskを使用して、@ NSGodによって私に指摘しました。

私も、トラブルブロック構文を考え出すを持っていたので、私は、私はその答えに投稿されたコードから引用します:

 // register for keys throughout the device... 
    [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(struct NSEvent *event){ 

    NSString *chars = [[event characters] lowercaseString]; 
    unichar character = [chars characterAtIndex:0]; 

    NSLog(@"keydown globally! Which key? This key: %c", character); 

    }]; 

ブロックと心に留めておくべき事は、彼らが直接供給されていることですメソッド呼び出しに渡します。私はmy own questionに追加されたより徹底した説明を持っていますが、上記の構文に従って、ブロックを「インラインデリゲートメソッド」の一種と考えるならば、ちょうどいいです。

1

addGlobalMonitorForEventsMatchingMaskまたはCGEventTapのいずれかを使用するには、アプリケーションをrootとして実行する必要があります。私はNSEventメソッドを私のために働かせることができませんでしたが、CGEventTapはrootとして罰金を科しました。

CGEventTap方法の利点は次のとおりです。

  • あなたも、それらのあなたのすべてのイベント、独自のアプリケーションを受けます。
  • さまざまなレベル(ウィンドウサーバーの前、セッションサーバーの前など)で
  • のイベントをタップできます。必要に応じてイベントを変更できます。
関連する問題