有没有一种方法可以区分左右Shift键被按下的情况?

8

我可以使用以下代码识别用户按下Shift键:

-(void)flagsChanged:(NSEvent *)theEvent
{
    if ([theEvent modifierFlags] & NSShiftKeyMask)
        //. . .
}

但是有没有办法区分是按下了右边的 Shift 键还是左边的 Shift 键呢?
3个回答

7
你可以像这样做:
-(void)flagsChanged:(NSEvent *)theEvent {

    if ([theEvent modifierFlags] == 131330) {
        NSLog(@"Left shift pressed!");
    }

    if ([theEvent modifierFlags] == 131332) {
        NSLog(@"Right shift pressed!");
    }
}

7
请从此处下载免费的应用程序“Key Codes”:http://manytricks.com/keycodes/。在这里,您可以查看所有键码和修改器。请注意:对于字母,您需要使用键码。 - Justin Boo
你不应该使用“==”来比较标志。可能会有其他同时处于活动状态的“标志”键(如大写锁定键),这会干扰比较的结果。 - undefined

3

在Swift中:

let isLeftShift = event.modifierFlags.rawValue & UInt(NX_DEVICELSHIFTKEYMASK) != 0
let isRightShift = event.modifierFlags.rawValue & UInt(NX_DEVICERSHIFTKEYMASK) != 0

非常好的解决方案。 - Binarian

-1
static __INLINE void i_modifier_flags(
                        NSUInteger flags,
                        bool_t *rshift, bool_t *rctrl, bool_t *rcommand, bool_t *ralt,
                        bool_t *lshift, bool_t *lctrl, bool_t *lcommand, bool_t *lalt)
{
    *rshift = ((flags & 131332) == 131332) ? TRUE : FALSE;
    *rctrl = ((flags & 270592) == 270592) ? TRUE : FALSE;
    *rcommand = ((flags & 1048848) == 1048848) ? TRUE : FALSE;
    *ralt = ((flags & 524608) == 524608) ? TRUE : FALSE;
    *lshift = ((flags & 131330) == 131330) ? TRUE : FALSE;
    *lctrl = ((flags & 262401) == 262401) ? TRUE : FALSE;
    *lcommand = ((flags & 1048840) == 1048840) ? TRUE : FALSE;
    *lalt = ((flags & 524576) == 524576) ? TRUE : FALSE;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接