NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截

2019-07-31 12:51发布

我想,与对照 + Shift键开始并以字符(强制)结束截距热键。
我有以下代码:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask handler: ^(NSEvent *event) {
    NSUInteger flags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
    if(flags == NSControlKeyMask + NSShiftKeyMask){
        NSLog(@"pressed!");
    }
}];

我需要什么添加到我的代码检查,如果用户按下控制 +性格,什么字符,用户按下?
该代码NSLog(@"pressed!"); 将被执行只有在我上面说的是真的。

这是我在找我的伪代码:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask handler: ^(NSEvent *event) {
    NSUInteger flags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
    if((flags == NSControlKeyMask + NSShiftKeyMask) && [event containsCharacter]){
       NSLog(@"%@", [event character];
    }
}];

因此,如果用户按下控制 + Shift键 +1我会做的一件事,如果控制 + Shift其他+2的事情,等等...

Answer 1:

你需要比较按位:

- (void)keyDown:(NSEvent *)theEvent { 
    if ([theEvent modifierFlags] & (NSControlKeyMask | NSShiftKeyMask)) { 
        if (theEvent.keyCode == 1/* add the right key code */) {
            NSLog(@"Do something");
        }
    } else { 
        [super keyDown:theEvent]; 
    } 
} 


Answer 2:

试试这个:

 [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) {
    NSUInteger key = 8; // 8 is "C"
    NSUInteger modifier = NSControlKeyMask + NSShiftKeyMask; 
    if ([event keyCode] == key && [NSEvent modifierFlags] == modifier)

NSLog(@"pressed!");

}];


文章来源: NSEvent addGlobalMonitorForEventsMatchingMask: Hotkey Intercepting