NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截 [英] NSEvent addGlobalMonitorForEventsMatchingMask: Hotkey Intercepting
问题描述
我想截取以 Control + Shift 开头并以字符(强制性)结尾的热键.
我有以下代码:
I wanna intercept hotkeys that begin with Control+Shift and ends with a character (mandatory).
I have the following code:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask handler: ^(NSEvent *event) {
NSUInteger flags = [event modifierFlags] & NSDeviceIndependentModifierFlagsMask;
if(flags == NSControlKeyMask + NSShiftKeyMask){
NSLog(@"pressed!");
}
}];
我需要在代码中添加些什么,以检查用户是否按了 Control Shift +字符,以及用户按了什么字符?
仅当我上面所说的为真时,才会执行代码NSLog(@"pressed!");
.
这是我正在寻找的伪代码:
What do i need to add to my code to check if the user pressed ControlShift+character, and what character the user pressed?
The code NSLog(@"pressed!");
will be executed only if what i said above is true.
This is my pseudo-code for what i'm looking for:
[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其他东西,依此类推...
So if the user presses Control+Shift+1 i'll do one thing, if Control+Shift+2 other thing, and so on...
推荐答案
您需要按位比较:
- (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];
}
}
这篇关于NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!