cks*_*ubs 4 macos cocoa objective-c
我有一个NSEvent Keyboard钩子回调.我正在查看事件的修饰符标志,以判断该字母是否应该大写.
当大写锁定已开启并转移被按住了,你按一个键......那钥匙出来作为一个大写字母,但都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;
Run Code Online (Sandbox Code Playgroud)
所以,
-Cap-Lock打开(指示灯亮)
-Shift被压制住了
- 点击[e]键
- 输出为"E"
- 上面代码的输出为FALSE FALSE.
使用shift OR caps正确报告值.为什么没有正确报告它们?如果它们都关闭了......为什么这封信仍然被大写?
如果出于某种原因这是正确的......除了按住按键和按下按键之外,我怎么能告诉正常的按键呢?(它们具有相同的FALSE-FALSE标志)
Wev*_*vah 11
你不想使用==,你需要使用按位运算符:
if( flags & NSShiftKeyMask ){
...
if( flags & NSAlphaShiftKeyMask ){
Run Code Online (Sandbox Code Playgroud)