访问键盘API

3

我希望能够在Mac应用程序中拦截键盘事件。

我希望用户可以启动一个“记录”活动,该活动将复制按键信息,然后再停止该活动。

通过Cocoa的Mac API是否可能实现这一点?

2个回答

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;
    }];

当然你不能拦截其他应用程序的按键,对吧? - darksky
我相信你可以做到,但使用全局监视器而不是本地监视器(也是一个NSEvent方法)。 - rdelmar
2
使用NSEvent API进行全局监控的一个大问题是,您无法获取某些类型的事件。(而且列表根据操作系统版本略有不同。)因此,如果您必须在Lion中记录全局热键,它们就不会显示出来。如果您关心这些情况中的任何一种,那么您别无选择,只能从其他答案中降级到CGEventTap级别。 - abarnert

3

要拦截所有键盘输入(如果需要还可以包括鼠标),请查看Quartz Events API此帖子展示了使用该API的代码示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接