chamekanの日記

2005-09-10OnBoardC開発環境改善

キーボード入力改善

http://www.geocities.com/nagamatu/KeyReplace/

これは、こちらのKeyReplaceというソフトを使用しました。

キーを押すと、それのchr、keycode、modifiersというパラメータがあるようです。で、それを途中でフックして書き換えてくれるので、つまり、キーの割り当てがないところ(あるいは既に設定された文字)を、適当な文字に置き換えできます。

で、キーを押されたときにこれらのパラメータがどうなるか、というのがわかっているといいんですが、フツーのひとには、わかりません(^_^;)(PalmないしSonyが勝手に決めた法則やし(^_^;))。

どっかにちゃんとした資料があるのかもしれないですが(^_^;)。

ここが、悩む第一段階。

で、

http://muchy.sakura.ne.jp/review/mkkeyeventviewer.html

このmkKeyEventViwerを導入します。

これで、キーを押したときの前述の3つのパラメータを表示してくれます。

しかし!

1回キーを押して離すまでに、やたらと、いろんなコードがでてくるんですよ(^_^;)。

わたしは、とりあえず、以下のように設定したいと思ったのですが。

UX-50の【青●】キー(以下●と表記)(そういうのがあるんですよ、他の機種はどうなるのかわかりませんが)を使って、同時押しで、{、}、|を入力したいと思ったのですが、UX-50での覚えやすさから。

●+E →{

●+R → }

●+I → |

と設定しようと思ったのです。

E、Rの下にあたるS、Dが●との同時押しで、<、>になってるので、それを上にずらして{、}がいいかな、というのと、Iは、形が|に近いからです。

で、

●を押し、押したままEを押し、Eを離し、●を離すなどとやってると、やたらとイベントが発生して、なにがなにを指しているのかわかりません(^_^;)。これが、第二の悩むポイント。

で、

chrというのは、文字のアスキーコードかと思ってたんですが、どうも、ある種のイベントの種類を表しているというのがわかってきました。

chr 1720 は、キーを押した、ということみたいです。

chr 1721 は、キーを離した、ということみたいです。

chr 012D は、キーリピートが発生している、ということみたいです。

それを元に、さっきのソフトでのイベントの値を見ると、読み解けます。

KeyCodeが、基本的には文字のアスキーコードですが、文字が割り当てられていないところは、違うコードになっているところもあります。

Modifiersが、シフトとか、くだんの●キーとか、ctrlとか(これはUX-50にあるキーですが。つまり、モードを指定するもの、ということでしょうね)の場合で、いろんなビットが立つようです。UX-50の●キーでは、0008になっています。

以上のような知識を得た上で、変換する数字を決めていきます。

わたしの場合は、とりあえず、{、}、|用に3つの変換規則を決めました。

それをひとつ例示すると、

chr 1720→1720

keyCode 9065→007B

modifiers 0008→0008

chr 1721→1721

keyCode 9065→007B

modifiers 0008→0008

これが、●+E→{にするための変換規則です。

1720は押したとき用。これだけで、入力できるようになるんですが、ソフトによっては押したときと離したときでKeyCodeが違っていると誤動作する可能性なども考えられ、1721の離した時用の設定も組にしてます。

9065の下二桁65(hexで)は、実は「e」のアスキーコードです。なんか、●+eのkeycodeとして臨時で、そういう法則でコード付けしているようです。これを変換して、007B、これは「{」のアスキーコードです。

modifiersの0008は、●を押しているということですが、これは、そのままにしてます。

というわけで、機種が変わると、また、ちょっと考える必要がでてくると思いますが、いちおう以上のようなパースペクティブを頭にいれて、いろいろ思考錯誤してみてください(^_^;)。

わからない場合は、わたしのわかる範囲で協力します。