如何判断Dock上的修改键是否关闭

Dov*_*Dov 3 keyboard macos cocoa drag-and-drop dock

我的Cocoa应用程序支持将文件拖放到Dock图标上,但我想要根据是否按下修改键(命令,选项等)来执行不同的行为.

我尝试检查modifierFlagsfor currentEvent,但无论是否按下修饰符,它们都是相同的(我正在使用Option键进行测试).

码:

// Code is inside my AppDelegate
- (void)application:(NSApplication *)theApplication openFiles:(NSArray *)files {
    BOOL optDown = (([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask)
                    == NSAlternateKeyMask);
    NSLog(@"flags: %u, down? %@", [[NSApp currentEvent] modifierFlags],
          optDown ? @"YES" : @"NO");
}
Run Code Online (Sandbox Code Playgroud)

输出(使用Option键关闭文件,然后不丢弃):

flags: 1088, down? NO
flags: 1088, down? NO
Run Code Online (Sandbox Code Playgroud)

预期

flags: <not sure>, down? YES
flags: <different>, down? NO
Run Code Online (Sandbox Code Playgroud)

Nic*_*ley 14

通常,[NSApp currentEvent]如果您的应用程序不在最前面,您不能指望与当前用户状态有任何关系.

要获得硬件状态,无论最前端的应用程序如何都可以使用,GetCurrentKeyModifiers()支持回到10.0(包括64位); [NSEvent modifierFlags]如果您需要10.6,则是另一种选择.