2

Control+で始まり、文字で終わるホットキーをインターセプトしたいShift(必須)。
私は次のコードを持っています:

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

ControlShiftユーザーが+文字を押したかどうか、およびユーザーがどの文字を押したか を確認するには、コードに何を追加する必要がありますか?
コード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を押すと、1つのことを実行し、Control+ Shift+2を押すと、他のことを実行します...

4

2 に答える 2

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]; 
    } 
} 
于 2012-09-14T14:17:42.067 に答える
-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!");

}];
于 2012-09-12T13:40:06.327 に答える