Флаги модификатора NSEvent не обновляются до тех пор, пока мышь не переместится - PullRequest
2 голосов
/ 07 сентября 2010

В Mac OS X 10.6 NSEvent имеет метод класса +modifierFlags для определения текущих нажатых флагов модификаторов.В 10.5 использование [[NSApp currentEvent] modifierFlags] обновляет только после перемещения мыши.Есть ли способ асинхронно получить флаги модификатора?

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

Согласно комментарию к этой записи в блоге , вы можете использовать CGEventCreate () и CGEventGetFlags ().

CGEventRef event = CGEventCreate(NULL /*default event source*/);
CGEventFlags mods = CGEventGetFlags(event);
if (mods & kCGEventFlagMaskShift)
    NSLog(@"Shift key is being pressed");

Флаги модификаторов, возвращаемые CGEventGetFlags () (CGEventFlags)так же, как и NSEvent.

2 голосов
/ 07 сентября 2010

GetCurrentKeyModifiers().Это функция C, но она доступна в приложениях Какао (она является частью инфраструктуры Carbon, но все еще доступна в 64-битных системах, IIRC.) Обратите внимание, что используемые ей флаги не равны флагам Какао, поэтому ваши тесты будут иметьизменить соответствующим образом.

...