В чем заключается хитрость «запуска приложения, удерживающего [ключ-модификатор]»? - PullRequest
16 голосов
/ 11 сентября 2011

Приложения iTunes и Reeder (и я уверен, что многие другие) имеют возможность изменять поведение при запуске, когда они запускаются, удерживая клавишу ⌥ (опция). Я пытался посмотреть на NSApplicationDelegate методы, но, похоже, ни один из них не добавляет какой-либо намек на то, что я ищу. Как достигается эта функциональность?

Ответы [ 2 ]

23 голосов
/ 11 сентября 2011

В приложении вашего приложения ApplicationDidFinishLaunching: метод

NSUInteger flags = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);

BOOL isOptionPressed = (flags == NSAlternateKeyMask);

(отредактировано для соответствия удивительному ответу Объявление и проверка / сравнение (bitmask-) перечислений в Objective-C Ранее это было BOOL isOptionPressed = (0 != (flags & NSAlternateKeyMask)); Но проверка нуля не обязательна, чтобы проверить, является ли битовая маска равенством, если только сама битовая маска не представляет все нули в двоичном формате. Предоставленная ссылка дает более подробную информацию.)

1 голос
/ 28 ноября 2013

Ответ Фрэнсиса МакГрю нуждается в улучшении, прежде чем он сможет работать, но я все еще не вижу решения по этому пути. Ответ, как указано, не компилируется. Фактический указатель NSEvent необходим для modifierFlags, который не является методом класса, как следует из ответа.

Можно надеяться, что нужное событие может быть получено следующим образом.

NSEvent *event = [NSApp currentEvent];

Однако при вызове из applicationDidFinishLaunching результирующее событие равно nil. По крайней мере, это верно в моем тестировании на Snow Leopard.

applicationDidFinishLaunching имеет аргумент NSNotification, но я не знаю, как его использовать.

Я нашел похожий вопрос на сайте cocobuilder.com от 2007 года, и ответ там в основном вызывать функцию углерода GetCurrentKeyModifiers и преобразовывать углеродные флаги в форму какао.

См. http://www.cocoabuilder.com/archive/cocoa/176882-detecting-modifier-keys-at-launch.html

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