【发布时间】: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
在 Mac OS X 10.6 中,NSEvent 有一个 +modifierFlags 类方法来确定当前按下的修饰符标志。在 10.5 中,使用 [[NSApp currentEvent] modifierFlags] 仅在鼠标移动后更新。有什么方法可以异步获取修饰符标志吗?
【问题讨论】:
标签: cocoa osx-snow-leopard osx-leopard nsevent
GetCurrentKeyModifiers()。它是一个 C 函数,但在 Cocoa 应用程序中可用(它是 Carbon 框架的一部分,但在 64 位系统 IIRC 上仍然可用。)请注意,它使用的标志不等于 Cocoa 标志,因此您的测试将具有适当改变。
【讨论】:
根据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的相同。
【讨论】: