Macos 在OS X上独立捕获每个SHIFT键
我有一个工作代码()用于捕获非修改器keydown事件和修改器更改事件的键代码 但如果你这样做了:Macos 在OS X上独立捕获每个SHIFT键,macos,hook,keyboard-events,tap,iokit,Macos,Hook,Keyboard Events,Tap,Iokit,我有一个工作代码()用于捕获非修改器keydown事件和修改器更改事件的键代码 但如果你这样做了: LSHIFT down -> RSHIFT down -> RSHIFT up -> LSHIFT up 。。。内部2个动作不会触发这两个钩子中的任何一个,因为修改器状态没有改变 (编辑:Woops!我应该在写之前测试一下,因为实际上每次实际更改都会产生一个新的修改器。) 我唯一的想法可能是在更低的层次上观看()——但无论从哪个角度看,这都不好看。摘自Justin Boo的答案
LSHIFT down -> RSHIFT down -> RSHIFT up -> LSHIFT up
。。。内部2个动作不会触发这两个钩子中的任何一个,因为修改器状态没有改变
(编辑:Woops!我应该在写之前测试一下,因为实际上每次实际更改都会产生一个新的修改器。)
我唯一的想法可能是在更低的层次上观看()——但无论从哪个角度看,这都不好看。摘自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
s,例如lshift down
和rshift down
,因为在按下修改器时应该调用此方法。您可能还可以在keyDown
实现中检测此属性,以检测差异,如“a”和“a”。否,它们有单独的键码——我通过执行第二个链接中的代码确认了这一点。假设您正在制作一个带有Obj-C(给定OSX标记)的Cocoa应用程序,您可以使用该代码。执行-(void)标记更改:(n事件*)
并检查[theEvent修饰符]
。L档为131330,R档为131332@Arc676啊,你这个笨蛋!我刚刚测试过,它确实正确地隔离了L&R转换事件。即使是复合材料,如+L+R-L-R和+L+R-R-L。如果你把它作为一个答案,我会很高兴地接受它。