在OS X上单独捕获每个SHIFT键



我有工作代码(在这里)捕获非修饰符keydown事件和修饰符更改事件的键码。

但是如果你这样做了:

LSHIFT down -> RSHIFT down -> RSHIFT up -> LSHIFT up

…内部操作不会触发这两个钩子,因为修饰符状态没有改变!

(编辑:糟糕!我应该在编写之前对其进行测试,因为实际上每次实际更改都会产生一个新的修改过的修饰符。

我唯一的想法可能是在更低的水平(这里)额外观看-但无论我从哪个角度看它都不好看。

摘自Justin Boo的回答

我添加了更多的修饰符,以防有人偶然发现这一点,并希望其他键。

- (void) flagsChanged:(NSEvent*)theEvent{
    if ([theEvent modifier] == 131330){
        //do stuff regarding left shift
    }else if ([theEvent modifier] == 131332){
        //do stuff regarding right shift
    }else if ([theEvent modifier] == 65792){
        //caps lock is on
    }else if ([theEvent modifier] == 8388864){
        //FN key pressed
    }else if ([theEvent modifier] == 262401){
        //control key pressed
    }else if ([theEvent modifier] == 524576){
        //option key pressed
    }else if ([theEvent modifier] == 1048840){
        //command key pressed
    }else if ([theEvent modifier] == 256){
        //there are no modified pressed and caps lock is off
    }
}

我建议在你的类中存储一些BOOL,如LShiftDownRShiftDown,因为这个方法应该在按下修饰符时调用。您可能还可以在keyDown实现中检测此属性,以检测诸如"a"one_answers"a"之类的差异。

相关内容

  • 没有找到相关文章

最新更新