2012-06-05 121 views
3

我正在尋找攔截Mac應用程序中的鍵盤事件。訪問鍵盤API

我希望用戶啓動一個「記錄」活動,它將複製密鑰塊,然後進行「停止」活動。

這可能通過Cocoa的Mac API嗎?

回答

6

看看NSEvent方法addLocalMonitorForEventsMatchingMask:handler :.這將允許您接收在您的應用中發生的事件(特別是您的案例中的keyDown事件),然後您可以使用該方法返回的擊鍵執行任何您想要的操作。下面是如何使用該方法,一個簡單的例子:

self.keystrokes = [NSMutableString string]; 
    [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^NSEvent* (NSEvent* event){ 
     NSString *keyPressed = event.charactersIgnoringModifiers; 
     [self.keystrokes appendString:keyPressed]; 
     return event; 
    }]; 
+0

當然,你不能攔截其他應用程序的關鍵筆畫,你能嗎? – darksky

+0

我相信你可以,但用全局監視器而不是本地監視器(也是NSEvent方法)。 – rdelmar

+2

使用NSEvent API進行全局監控的一個主要問題是,有些事件沒有得到。 (根據操作系統版本的不同,列表會有所不同)。因此,如果您必須在Lion中記錄全局熱鍵,它們就不會顯示出來。如果您關心其中的任何一種情況,您別無選擇,只能下降到CGEventTap級別(從其他答案中)。 – abarnert

3

截獲所有鍵盤輸入(也鼠標,如果你想的話)檢查出Quartz Events APIThis post有一些代碼演示了API的用法。