【问题标题】:Is there a way to differentiate between left and right Shift keys being pressed?有没有办法区分按下的左右 Shift 键?
【发布时间】:2020-04-19 18:48:05
【问题描述】:

我可以识别用户何时使用此代码按下任何 Shift 键:

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

但是有什么方法可以区分按下的是右Shift键还是左Shift键?

【问题讨论】:

    标签: objective-c macos cocoa nsevent


    【解决方案1】:

    你可以这样做:

    -(void)flagsChanged:(NSEvent *)theEvent {
    
        if ([theEvent modifierFlags] == 131330) {
            NSLog(@"Left shift pressed!");
        }
    
        if ([theEvent modifierFlags] == 131332) {
            NSLog(@"Right shift pressed!");
        }
    }
    

    【讨论】:

    • @user437064 从这里下载这个免费的应用程序Key Codes:manytricks.com/keycodes。在这里您可以看到所有关键代码和修饰符。 注意: 对于字母,您需要使用 Key Codes。
    【解决方案2】:

    在 Swift 中:

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

    【讨论】:

    • 非常好的解决方案。
    【解决方案3】:
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多