我想拦截以 Control + Shift 开头的热键,并以字符结尾(必填)。
我有以下代码:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask handler: ^(NSEvent *event) {
NSUInteger flags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
if(flags == NSControlKeyMask + NSShiftKeyMask){
NSLog(@"pressed!");
}
}];
我需要在代码中添加什么来检查用户是否按下 Control Shift +字符,以及用户按下了什么字符?
只有当我上面说的是真的时,代码NSLog(@"pressed!");
才会被执行。
这是我正在寻找的伪代码:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask handler: ^(NSEvent *event) {
NSUInteger flags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
if((flags == NSControlKeyMask + NSShiftKeyMask) && [event containsCharacter]){
NSLog(@"%@", [event character];
}
}];
因此,如果用户按 Control + Shift +1我会做一件事,如果 Control + Shift +2其他的东西,等等...
答案 0 :(得分:3)
你需要逐位比较:
- (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];
}
}
答案 1 :(得分:-3)
试试这个:
[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!");
}];