ページ

2009年7月7日火曜日

ホットキー変更対応(21) - 実装サンプル

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

サンプルアプリを作り昨日まで作成したクラスの動作確認を行う。
サンプル:HotKey-1.zip

いつものごとく AppController を用意し、InterfaceBuilderでインスタンス化しておく。そして実行時 Nibファイル(Xib)読み込み後に呼び出される awakeFromNib でホットキーの登録を行う。

AppController.m

- (void)awakeFromNib
{
_hotkey_register = [HotkeyRegister sharedRegister];

Hotkey *hotkey;

hotkey = [[[Hotkey alloc] init] autorelease];
hotkey.code = 0x23; // 'P'
hotkey.modifier = cmdKey | optionKey;
hotkey.target = self;
hotkey.action = @selector(keyDown:);
[_hotkey_register registHotkey:hotkey];

hotkey = [[[Hotkey alloc] init] autorelease];
hotkey.code = 0x25; // 'L'
hotkey.modifier = cmdKey | optionKey;
hotkey.target = self;
hotkey.action = @selector(keyDown:);
[_hotkey_register registHotkey:hotkey];

}


試しに Command + Option + P or L の2つのキーを登録してみた。これらのキーが呼び出されると - [AppController keyDown:] が呼び出される。

- (void)keyDown:(Hotkey*)hotkey
{
NSLog(@"keyDown: keycode=%x", hotkey.code);
}



後始末として NSApplication のデリゲートメソッド - [NSApplication applicationWillTerminate:] で - [HotkeyRegister unregistAll] を呼び出す。

- (void)applicationWillTerminate:(NSNotification *)aNotification
{
[_hotkey_register unregistAll];
}



さて実行してみよう。

アプリケーションが立ち上がったら Command + Option + P または L を押す。

デバッガコンソール
[Session started at 2009-07-07 22:42:07 +0900.]
2009-07-07 22:42:08.584 Hotkey[22009:10b] registHotkey: keyid=0, modifier=900, code=23, ref=13c020,
target=, action=keyDown:
2009-07-07 22:42:08.589 Hotkey[22009:10b] {(

)}
2009-07-07 22:42:08.592 Hotkey[22009:10b] registHotkey: keyid=1, modifier=900, code=25, ref=12cbc0,
target=, action=keyDown:
2009-07-07 22:42:08.663 Hotkey[22009:10b] {(
,

)}
2009-07-07 22:42:11.813 Hotkey[22009:10b] keyDown: keycode=25
2009-07-07 22:42:12.845 Hotkey[22009:10b] keyDown: keycode=23
2009-07-07 22:42:14.238 Hotkey[22009:10b] unregistHotkey:
2009-07-07 22:42:14.243 Hotkey[22009:10b] unregistHotkey:
2009-07-07 22:42:14.245 Hotkey[22009:10b] finished

The Debugger has exited with status 0.


ちゃんと - [AppController keyDown:] が呼び出されているようだ。
アプリケーション終了時の - [HotkeyRegister ungregistHotkey:] も最後に呼び出されている。