如何判断在 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 事件中按下了修饰键

求高手解决:js如何判断鼠标左键是不是按下?

已按下提交按钮的 MVC

Android - OnTouchListener如果已按下屏幕则不会触发

使用修饰键在 pyqt4 中拖放