【发布时间】:2011-11-15 19:54:39
【问题描述】:
我有一个 NSEvent 键盘挂钩回调。我正在查看事件的修饰符标志来判断字母是否应该大写。
当 Caps-Lock 打开并按住 shift 键时,您按下一个键...该键显示为大写字母,但 SHIFT 和 CAPS 标志都返回 FALSE。
//For testing which flags are on.
//Holding down Shift and Caps for some reason = FALSE FALSE...
NSUInteger flags = [NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask;
if( flags == NSShiftKeyMask ){
NSLog(@"Shift - TRUE");
} else {
NSLog(@"Shift - FALSE");
}
if( flags == NSAlphaShiftKeyMask ){
NSLog(@"CAPS - TRUE");
} else {
NSLog(@"CAPS - FALSE");
}
return newUserKeypress;
所以,
-Caps-Lock 开启(灯亮)
-Shift 被按住
-点击[e]键
-输出为“E”
-但是上面代码的输出是FALSE FALSE。
使用移位或大写正确报告值。为什么不让他们两个都正确报告?如果他们两个都关闭了......为什么这个字母仍然是大写的?
如果由于某种原因这是正确的...除了按住 shift 和 caps 的按键之外,我如何区分正常的按键? (它们具有相同的 FALSE-FALSE 标志)
【问题讨论】:
标签: objective-c macos cocoa