我有工作代码(here),用于捕获非修饰符keydown事件和修饰符更改事件的密钥代码。
但如果你这样做:
LSHIFT down -> RSHIFT down -> RSHIFT up -> LSHIFT up
...内部2动作不会触发这些挂钩,因为修饰符状态不会改变!
(编辑:Woops!我应该在写之前对其进行测试,因为实际上每次实际更改都会产生一个新的修饰符更改。)
我唯一想到的可能是在更低的水平(here)进行额外观察 - 但无论从哪个角度来看,它看起来都不是很好。
答案 0 :(得分:2)
取自Justin Boo的回答here
我添加了一些修饰符以防万一有人偶然发现并想要其他键。
- (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
,例如LShiftDown
和RShiftDown
,因为在按下修改器时应调用此方法。您也可以在keyDown
实施中检测此属性,以检测“a”和“A”之类的差异。