如何判断在 Dock 上放置期间修饰键是不是已按下
Posted
技术标签:
【中文标题】如何判断在 Dock 上放置期间修饰键是不是已按下【英文标题】:How to tell if a modifier key is down during drop on Dock如何判断在 Dock 上放置期间修饰键是否已按下 【发布时间】:2011-08-25 01:52:33 【问题描述】:我的 Cocoa 应用程序支持将文件拖放到它的 Dock 图标上,但我想要不同的行为,具体取决于是否按下修饰键(命令、选项等)。
我尝试检查 modifierFlags
中的 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");
输出(用 Option 键放下文件,然后不放):
flags: 1088, down? NO
flags: 1088, down? NO
预期
flags: <not sure>, down? YES
flags: <different>, down? NO
【问题讨论】:
【参考方案1】:一般来说,如果您的应用不在最前面,您不能指望[NSApp currentEvent]
与当前用户状态有任何关系。
要获取硬件状态,不管最前面的应用程序如何,GetCurrentKeyModifiers()
支持回到 10.0(包括 64 位);如果您需要 10.6,[NSEvent modifierFlags]
是另一种选择。
【讨论】:
谢谢,[NSEvent modifierFlags]
完美解决了这个问题(我确实需要 10.6)。以上是关于如何判断在 Dock 上放置期间修饰键是不是已按下的主要内容,如果未能解决你的问题,请参考以下文章
检测是不是在 KeyRoutedEventArgs 事件中按下了修饰键