2011-01-05 33 views
2

我不想關注窗口,我想用Cocoa獲得關鍵值。 如果你知道,請教我。如何用Cocoa獲得關鍵值,而不管是否關注窗口

+0

我不知道如何在可可中做到這一點,但你必須直接查詢鍵盤。如果你沒有焦點,鍵盤按鍵消息將不會發送給你,除非你有一個混雜的消息攔截模式。 – EnabrenTane 2011-01-05 22:55:38

+0

OSX 10.6允許您在全球範圍內註冊鍵盤事件 - 請參閱Dave DeLong的答案和我的答案。 – 2011-01-21 18:38:01

回答

0

我最近asked this question和使用addGlobalMonitorForEventsMatchingMask,就像Dave Delong所說的那樣,@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方法的優點是:

  • 您收到的所有事件,即使是那些你自己的應用程序。 (另一種方法不會將您自己的事件發送給您)
  • 您可以在各個級別(在窗口服務器之前,在會話服務器之前等)點擊事件
  • 如果需要,您可以修改事件。
相關問題