【问题标题】:NSEvent modifier flags not updating until mouse movesNSEvent 修饰符标志在鼠标移动之前不会更新
【发布时间】:2011-04-09 07:03:31
【问题描述】:

在 Mac OS X 10.6 中,NSEvent 有一个 +modifierFlags 类方法来确定当前按下的修饰符标志。在 10.5 中,使用 [[NSApp currentEvent] modifierFlags] 仅在鼠标移动后更新。有什么方法可以异步获取修饰符标志吗?

【问题讨论】:

    标签: cocoa osx-snow-leopard osx-leopard nsevent


    【解决方案1】:

    GetCurrentKeyModifiers()。它是一个 C 函数,但在 Cocoa 应用程序中可用(它是 Carbon 框架的一部分,但在 64 位系统 IIRC 上仍然可用。)请注意,它使用的标志不等于 Cocoa 标志,因此您的测试将具有适当改变。

    【讨论】:

    • 它是否仅在 64 位系统上可用?我正在尝试针对运行 10.5 的 32 位系统。
    • Alexsander Akers:不。自从 CarbonLib 在 Mac OS 上出现以来,它就一直可用,包括从那时到现在的所有 32 位系统;他提到了 64 位的兼容性,因为很多人在看到建议的 Carbon 功能时,会猛烈抨击并尖叫“Carbon 在 64 位中不可用!”。
    【解决方案2】:

    根据this blog post的评论,可以使用CGEventCreate()和CGEventGetFlags()。

    CGEventRef event = CGEventCreate(NULL /*default event source*/);
    CGEventFlags mods = CGEventGetFlags(event);
    if (mods & kCGEventFlagMaskShift)
        NSLog(@"Shift key is being pressed");
    

    CGEventGetFlags() 返回的修饰符标志(CGEventFlags)与NSEvent的相同。

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 2011-11-15
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多