Ловушка каждой клавиши SHIFT независимо от OS X
У меня есть рабочий код ( здесь), который перехватывает коды клавиш для событий нажатия клавиш, не являющихся модификаторами, и событий, измененных модификаторами.
Но если вы делаете:
LSHIFT down -> RSHIFT down -> RSHIFT up -> LSHIFT up
... внутренние 2 действия не будут вызывать ни одну из этих ловушек, потому что состояние модификатора не меняется!
(РЕДАКТИРОВАТЬ: Woops! Я должен был проверить это перед написанием, потому что на самом деле каждое новое изменение производится с новым модификатором.)
Моя единственная мысль, может быть, дополнительно смотреть на еще более низком уровне ( здесь) - но это не выглядит довольно независимо от того, под каким углом я смотрю на него.
1 ответ
Взято из ответа Джастина Бу здесь
Я добавил еще один модификатор на тот случай, если кто-то наткнется на это и захочет другие ключи.
- (void) flagsChanged:(NSEvent*)theEvent{
if ([theEvent modifier] == 131330){
//do stuff regarding left shift
}else if ([theEvent modifier] == 131332){
//do stuff regarding right shift
}else if ([theEvent modifier] == 65792){
//caps lock is on
}else if ([theEvent modifier] == 8388864){
//FN key pressed
}else if ([theEvent modifier] == 262401){
//control key pressed
}else if ([theEvent modifier] == 524576){
//option key pressed
}else if ([theEvent modifier] == 1048840){
//command key pressed
}else if ([theEvent modifier] == 256){
//there are no modified pressed and caps lock is off
}
}
Я рекомендую хранить некоторые BOOL
в вашем классе, такие как LShiftDown
а также RShiftDown
так как этот метод должен вызываться при нажатии модификаторов. Вы также можете обнаружить это свойство в вашем keyDown
реализация для обнаружения различий, таких как "а" и "а".