itok's Lab

昔の開発ネタを記録として残してます

キーイベントを生成する

例えばリターンキーイベントを Window に送る場合はこんな感じ。

NSEvent* event = [NSEvent
    keyEventWithType:NSKeyDown          // キーイベントの種類(1)
    location:NSZeroPoint                // イベントの起きた場所(2)
    modifierFlags:0                     // モディファイアキーフラグ(3)
    timestamp:0                         // イベントの起きた時間(4)
    windowNumber:[window windowNumber]  // イベントの起きたwindow(5)
    context:nil                         // ディスプレイコンテキスト(6)
    characters:@"\r"                    // キーイベントの文字列(7)
    charactersIgnoringModifiers:@"\r"   // モディファイアキーを除いたキー文字列(8)
    isARepeat:NO                        // 繰り返しイベントかどうか(9)
    keyCode:0];                         // キーコード(10)
[window postEvent:event atStart:YES];

必須なものとしては(1)(7)(8)あたりでしょうか。ちなみに、例によって NSApplication にも同様の postEvent:atStart: っていうメソッドがありますが、中身は同じ。NSWindow → NSApplication ってメッセージが転送されるだけ。