Я только что поэкспериментировал с методом addLocalMonitorForEventsMatchingMask: handler:
в NSEvent и наткнулся на следующий вопрос: как узнать, были ли нажаты только определенные модификаторы ?
Краткий пример, чтобы задать этот вопрос в контексте: я хотел прослушать сочетание клавиш «⌘ + W». Поэтому я написал следующий код:
[NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *theEvent) {
if ([theEvent modifierFlags] & NSCommandKeyMask && [theEvent keyCode] == 13) {
[self.window performClose:self];
}
return theEvent;
}];
Это работает хорошо, однако ярлык будет активирован, даже если будут нажаты другие клавиши-модификаторы, например, «⌃ + ⌘ + W» или «⇧ + ⌃ + ⌥ + ⌘ + W». Есть ли способ обойти это?
Простым решением было бы проверить все остальные клавиши-модификаторы и убедиться, что они не нажаты. Это кажется утомительным и подверженным ошибкам - кроме того » это достаточно уродливо, как сейчас с унарным "&". Вдобавок у вас могут возникнуть проблемы, если (по какой-то причине) к раскладке клавиатуры будет добавлена другая клавиша-модификатор.
Как всегда, я благодарен за любые рекомендации.