Может ли NSEvent запускаться при нажатии клавиши-модификатора?

Я пытаюсь определить точный момент нажатия клавиши-модификатора (например, ctrl, shift, cmd, alt).

Следующий код срабатывает только при нажатии клавиш без модификаторов (где любые клавиши-модификаторы, удерживаемые в данный момент, сообщаются для каждого события клавиши)

[NSEvent addGlobalMonitorForEventsMatchingMask:(NSKeyDownMask) handler:^(NSEvent *event){//Trigger function}}];

Есть ли способ расширить эту функцию, чтобы она срабатывала именно тогда, когда клавиши-модификаторы нажаты и нажаты?


person Ian    schedule 13.02.2015    source источник
comment
Вы пробовали NSFlagsChangedMask вместо NSKeyDownMask? Или две маски вместе, как NSKeyDownMask | NSFlagsChangedMask?   -  person rob mayoff    schedule 13.02.2015
comment
Спасибо за предложение, я не видел этого раньше. Я думаю, будет справедливо пометить это как дубликат, как это сделал Джош, но я действительно хочу иметь отдельные версии NSKeyDownMask и NSKeyUpMask для ключей-модификаторов. NSFlagsChangedMask срабатывает при нажатии и отпускании клавиш-модификаторов.   -  person Ian    schedule 13.02.2015
comment
Я думаю, единственный способ - сравнить события, как указано в связанном оригинале этого повторяющегося вопроса.   -  person Ian    schedule 13.02.2015
comment
Да, если флаг включен, когда вы получаете уведомление об изменении, то это означает, что ключ нажат; если выключено, нажмите клавишу вверх. Не вдаваясь в Deep Magic of IO Kit, я уверен, что это лучшее, что вы можете сделать. Этот материал NSEvent представляет собой оболочку для более низкого API, CGEventTaps, но я не припомню, чтобы они обладали гораздо большей функциональностью.   -  person jscs    schedule 13.02.2015