2011-05-13 79 views
3

我的Cocoa应用程序支持将文件拖放到Dock图标上,但是根据是否按住修饰键(Command,Option等) )。如何判断一个修饰键是否在拖放期间停靠Dock

我试着检查modifierFlagscurrentEvent,但它们是相同的,无论是否按住修饰符,或不是(我正在使用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"); 
} 

输出(丢弃与Option键一个文件下来,再不行):

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

预计

flags: <not sure>, down? YES 
flags: <different>, down? NO 

回答

13

一般而言,如果您的应用程序不是最前面的,则不能指望[NSApp currentEvent]与当前用户状态有任何关系。

为了获得硬件状态,无论最前面的应用程序如何,这些硬件状态都能正常工作,GetCurrentKeyModifiers()被支持回10.0(包括64位)。如果你可以要求10.6,[NSEvent modifierFlags]是另一种选择。

+0

谢谢,'[NSEvent modifierFlags]'完美地完成了这个技巧(我需要10.6)。 – Dov 2011-05-13 16:21:32

相关问题