スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« マウスカーソルの合成等 | トップページ | マウス操作が可能になった »

Cocoa版のキー入力とか

今は、OSX用Mirror-DTCクライアントのネイティブ版を開発中なのだが、折角のネイティブ版なので、今日は、Windows版と同様に、Command/Option等の特殊キーも入力用に使える様にする方法を調べていた。また、サーバーで使う事になる録音APIについても調べた。

Windows版Mirror-DTCクライアントでは、グローバルHookを使い、半角/全角キーだとかWindowsキーだとかの特殊キーについても、Mirror-DTCで使える様にしている。

つまり、半角/全角キーを押した場合、普通は、クライアントマシンでIMEが起動するのだが、そのキー入力をサーバー側に転送できる様にしている。

これに対して、現行のOSX版だとかUbuntu版では、特殊キーはOS側で処理されてしまうので、例えば、OSX版では、Command+Tabなんかを押すと、クライアントマシン側で、それに対応するアプリの選択画面が表示される事になる。

で、作者的には、以前、ネットで、Windows版の様な挙動だとアプリ切り替え等をキー操作で出来なくなるので不便だ、という様な書き込みも見かけた事はあるのだが、普通に考えて、現行のOSX/Ubuntu版の様な挙動よりは、Windows版の様な挙動の方が望ましいと思っている。

なので、今回のOSX版はネイティブアプリにする事もあり、少々の無理は利く筈なので、今日は、Windows版と同様に、特殊キーも入力用に使えるかどうかを確認していたのだが、出来る事が確認できた。

まあ、VirtualBoxで仮想マシンを動作させていると、当然の事ながら、特殊キーもOSではなく、VirtualBoxの仮想マシンが使えているので、ネイティブアプリにするMirror-DTCクライアントで出来ない訳はない、とは思っていたのだが、ひょっとすると、デバイスドライバレベルのモジュールを開発する必要があるか、と、思っていたのだが、そんな必要も無い事が判った訳だ。

具体的なやり方としては、まず、「グローバルホットキーを無効にする」、という題名でGoogle検索するとトップに出てくるサイトに載っている方法で、Command+Tab等のシステムに登録されているショートカットを無効にする。

で、上記を行えば、大体は、通常のキー入力イベントで特殊キーの入力も拾える様になるのだが、残念ながら、「英数」/「かな」キーについては、入力イベントが取れない。

なので、NSEventクラスのaddLocalMonitorForEventsMatchingMask:NSKeyDownMaskを使って、ハンドラーを登録し、実際のキー入力は、このハンドラー上で行う格好にする事にした。

もっとも、上記のハンドラーでは、Command/Optionなんかの入力は取れないので、通常のflagsChangedイベントハンドラーと併用する格好になる。

と、いう事で、まだ、正式にはコーディングはしていないのだが、OSX用のネイティブ版では、CommandキーをWindowsキー、OptionキーをAltキーとして、普通に使える様になる筈だ。

ただし、Macのキーボードには半角/全角キーは無いので、現行のJava版と同様の右シフトキー+通常キーによる入力もサポートすることになる。

ちなみに、冒頭に書いた様に、今日はMirror-DTCサーバーで必要になるAPIについても調べていたのだが、WindowsのCoreAudioとは違い、OSXのCoreAudioでは、ループバック録音は直接的には出来ないみたいなので、とりあえず、現行版と同様にSoundFlower経由での録音に対応するだけにする予定だ。

そうした場合、単純な録音ルーチンを実装すれば良いだけなのだが、色々と調べてみた所、OSXの場合、WindowsやJavaやUbuntuとは違って、単純な録音ルーチンですら、結構面倒な事をしなければならない様だ。

結果的に、比較的簡単そうなAudio Queue Serviceを使った方法で録音できる事を確認できたのだが、ネットにはiOS用に個人開発者がアップしていたサンプルコードしか見当たらず、必要部分のみを実装して動作させてみると例外が発生してマトモに動作しなかった。

なので、それらしく変更して対処したのだが、Appleの「iOS Developer Library」の「Audio Queue Services Programming」というページには、同等の処理コードが載っていて、そのコードは作者が修正したコードと同じ事をやっていた。

つまり、最初から、Appleのページを真面目に見れていれば、時間の節約になったかもしれないのだが、実際問題として、Appleのページだとかサンプルコードには、作者的には不要な別処理が山盛りになっているので、見る気にもならなかった訳だ。

なので、とりあえず、作者のOSX10.9では動作しなかったものの、個人開発者がアップしていたサンプルコードには意味が無い事はなかったかもしれない。

= この記事に関連する公開中ソフト =

Mirror-DTC

Mirror-DTC

(2015/02/15追加)

« マウスカーソルの合成等 | トップページ | マウス操作が可能になった »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/60266976

この記事へのトラックバック一覧です: Cocoa版のキー入力とか:

« マウスカーソルの合成等 | トップページ | マウス操作が可能になった »

2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google