在OS X上检测任何按键,包括修改键

时间:2014-04-05 21:30:51

标签: macos cocoa keyboard keypress nsevent

我需要检测用户按下的所有键。使用-keyDown:我可以获得大多数按键(字母数字,功能键,箭头,空格键,转义,返回),但单独按下时我无法获得任何修改键。

如何检测绝对任何按键,包括修改键?

2 个答案:

答案 0 :(得分:3)

试一试:

[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask|NSFlagsChangedMask handler:^NSEvent *(NSEvent *incomingEvent) {
    if (incomingEvent.type == NSFlagsChanged && (incomingEvent.modifierFlags & NSDeviceIndependentModifierFlagsMask)) {
        NSLog(@"modifier key down");
    } else if (incomingEvent.type == NSKeyDown) {
        NSLog(@"other key down");
    }

    return incomingEvent;
}];

答案 1 :(得分:2)

flagsChanged:方法可用于检测按下修改键而无需同时按下任何其他键。例如,如果用户单独按下Option键,则响应者对象可以在flagsChanged的实现中检测到:。