読者です 読者をやめる 読者になる 読者になる

Cocoaでキーイベントを受け取る

MacOS

cocoaでキーイベントを受け取るにはwindowをFirstResponderに設定しなければいけない。

- (BOOL)acceptsFirstResponder
{
    [[self window] makeFirstResponder:self];
    return YES;
}

- (void)keyDown:(NSEvent*)event
{
    // 入力文字 string として
    NSString* character = [event characters];
  
    // 文字 char として
    unichar char = [character characterAtIndex:0];

    // キーコード
    unsigned short keycode = [event keyCode];

    // キーコードを出力
    NSLog(@"%c : %d", char, keycode);
}

Modifier は以下の通り

enum {
    NSAlphaShiftKeyMask = 1 << 16,
    NSShiftKeyMask      = 1 << 17,
    NSControlKeyMask    = 1 << 18,
    NSAlternateKeyMask  = 1 << 19,
    NSCommandKeyMask    = 1 << 20,
    NSNumericPadKeyMask = 1 << 21,
    NSHelpKeyMask       = 1 << 22,
    NSFunctionKeyMask   = 1 << 23,
    NSDeviceIndependentModifierFlagsMask = 0xffff0000U
};

使い方はこんな感じ。 Ctrl + q で終了する。

if ([event modifierFlags] & NSControlKeyMask) {
    if ([event keyCode] == 12) exit(0);
}