NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截 [英] NSEvent addGlobalMonitorForEventsMatchingMask: Hotkey Intercepting

查看:188
本文介绍了NSEvent addGlobalMonitorForEventsMatchingMask:热键拦截的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想截取以 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆