访问键盘API

dar*_*sky 3 macos xcode cocoa objective-c

我希望拦截Mac应用程序中的键盘事件.

我希望用户启动"记录"活动,该活动将复制基石,然后是"停止"活动.

可以通过Cocoa的Mac API实现吗?

rde*_*mar 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;
    }];
Run Code Online (Sandbox Code Playgroud)

  • 使用NSEvent API进行全局监控的一个大问题是,您无法获得某些类型的事件.(根据操作系统版本,列表略有不同.)因此,如果您必须(例如)在Lion中记录全局热键,它们就不会显示出来.如果你关心任何这些情况,你别无选择,只能下降到CGEventTap级别(从另一个答案). (2认同)