2012-06-05 70 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的用法。