How to determine pressed modifier keys when a Cocoa app is started?
Asked Answered
B

2

13

In an app I'm developing, a database is used to store all user data, usually located somewhere in Library/Application Support. In order to enable the user to switch the database, I want to implement a functionality similar to iTunes or iPhoto, where the app asks for the library's or database's location if the option key is pressed upon starting the app.

How can I check the currently pressed (modifier) keys if no NSEvent is at hand?

I already tried:

[NSResponder flagsChanged:(NSEvent *)theEvent] – Probably not called because the option key is already down before the window and any responders are instantiated.

[[NSApplication sharedApplication] currentEvent] – Returns nil.

Bihari answered 12/5, 2015 at 17:32 Comment(0)
K
17

Put this in applicationDidFinishLaunching:

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

if (modifiers == NSAlternateKeyMask)   { 
    // do your stuff here 
}

Beginning with macOS 10.12, this should be:

NSUInteger modifiers = ([NSEvent modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask);

if (modifiers == NSEventModifierFlagOption)   { 
    // do your stuff here 
}
Kahlil answered 12/5, 2015 at 17:51 Comment(0)
T
3

Swift 5 variant:

func applicationDidFinishLaunch(_ aNotification: Notification?) {

    if NSEvent.modifierFlags.intersection(.deviceIndependentFlagsMask) == .option {
        // Your code
    }

}
Thoreau answered 3/6, 2020 at 12:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.