Как получить состояние клавиатуры в Objective-C, не обращаясь к NSEvent - PullRequest
8 голосов
/ 13 мая 2011

Можно ли получить состояние клавиатуры в Objective-C, не обращаясь к NSEvent?

В общем, я не могу использовать NSResponder методы, такие как -[NSResponder flagsChanged:], но мне нужно знать, еслиВ настоящий момент нажата командная клавиша.

1 Ответ

18 голосов
/ 14 мая 2011

Мне все еще интересно, почему вы не можете использовать NSEvent, но я все равно отвечу на вопрос.Возможно, вы создаете «инструмент командной строки» и связаны только с Foundation?Вам нужно будет включить хотя бы еще один фреймворк.Если вы хотите создать ссылку на AppKit, вы можете (как я уже упоминал в комментариях) использовать +[NSEvent modifierFlags];это метод класса NSEvent, так что вы можете использовать его где угодно, без необходимости иметь доступ к отдельному событию, чтобы получить текущее состояние клавиш-модификаторов в виде битовой маски.Документы объясняют значение битовой маски .

if( NSCommandKeyMask & [NSEvent modifierFlags] ){
    NSLog(@"Oh, yeah!");
}

Вы также можете получить эту информацию, используя Quartz Event Services .В этом случае вы должны включить платформу ApplicationServices *.Функции CGEventSource предоставят вам такую ​​же битовую маску , которую вы получите от NSEvent:

CGEventFlags theFlags;
theFlags = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState);
if( kCGEventFlagMaskCommand & theFlags ){
    NSLog(@"Uh huh!");
}

* Это уже включено, если вы, вНа самом деле, написание приложения Какао - это часть Quartz.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...