在鼠标移动之前,NSEvent修饰符标记不会更新

时间:2010-09-07 16:09:26

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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标志符相同。