我的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
答案 0 :(得分:14)
一般情况下,如果您的应用不在最前面,则不能指望[NSApp currentEvent]
与当前用户状态有任何关系。
要获得硬件状态,无论最前面的应用程序如何都可以使用,GetCurrentKeyModifiers()
支持回到10.0(包括64位);如果您需要10.6,则[NSEvent modifierFlags]
是另一种选择。