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

时间:2011-05-13 16:04:41

标签: cocoa macos drag-and-drop keyboard dock

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

我尝试检查modifierFlags的{​​{1}},但无论是否按下修饰符,它们都是相同的(我正在使用Option键进行测试)。

代码:

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");
}

预期

flags: 1088, down? NO
flags: 1088, down? NO

1 个答案:

答案 0 :(得分:14)

一般情况下,如果您的应用不在最前面,则不能指望[NSApp currentEvent]与当前用户状态有任何关系。

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