WindowsMobile5.0 gwkeywm v1.00 2007/05/05 Hiroyuki Ogasawara ●はじめに W-ZERO3/EM・ONE 等の内蔵キーボードで、文字入力を妨げずにさまざまな機能を 同居させるツールです。 例えば、ローマ字入力時にまず使わないだろうと思われる  [Q][C][V][F][J][L] のキーに、ソフトキーやカーソル移動、タスク切り替えなど の機能を割り当てることができます。割り当ては変更でき、もちろん割り当てない ことも可能です。 またローマ字入力中はほぼキーリピートは不要だと思われるので、[A]〜[Z] ボタン の長押しに各種アプリ起動や機能を定義します。 IME が off の場合 (日本語入力状態で無い場合) や Ctrl/Shift と一緒に押された 場合は、刻印どおりの元のキーとして機能します。キーリピートも可能です。 IME が on でないと機能しませんが、困ったことに ZERO3/EM・ONE はデフォルトで、 または何かのはずみにすぐ IME on になってしまうので都合がよいのです。 これで特殊な機能キーの少なさをカバーしつつ、文字入力にも極力影響を与えずに 共存することができます。 ●対応機種 ・WindowsMobile5.0   ・W-ZERO3 (WS003SH/WS004SH)   ・W-ZERO3[es] (WS007SH)   ・EM・ONE (S01SH)   ・その他 ●利用条件 フリーソフトウエアです。自己責任の範囲で自由にお使いください。問題や障害が 生じても作者は責任を取れませんので、重要なデータはあらかじめバックアップを とっておいてください。 ●インストール方法  (1) このプログラムは em1key のスクリプトで記述されています。まずは    em1key v1.21 以降のインストールを行ってください。   http://hp.vector.co.jp/authors/VA004474/wince/wince.html#em1key  (2) アーカイブ内のスクリプトファイル scriptcommand.txt を、em1key を    インストールしたフォルダ     \Program Files\em1key    にコピーしてください。  (3) em1key を一旦終了させて、もう一度起動します。    scriptcommand.txt を読み直すためです。  以上で完了となります。 ●アンインストール方法  不要なら em1key ごとアンインストールしてください。  もしくは元の scriptcommand.txt に設定を戻してください。 ●使い方 内蔵キーボードで IME が on の場合、デフォルトで下図の機能を使うことができます。  [Q] タスク切り替え  [Q]長押し タスク終了  [F] ページアップ  [V] ページダウン  [C] Winキー (スタートメニュー)  [J] 左ソフトキー  [L] 右ソフトキー  [A]長押し 連絡先 (poutlook contacts)  [B]長押し ブンコビューア (XMDFViewer)  [D]長押し 電卓 (calc)  [E]長押し EasyDial (インストール場所の指定が必要)  [F]長押し GSFinder (インストール場所の指定が必要)  [I]長押し IE (iexplore)  [L]長押し ライトメール(ZERO3)  [M]長押し Outlook (tmail)  [N]長押し メモ (notes)  [O]長押し Opera (ZERO3[es]/EM・ONE)  [P]長押し WindowsMedia (wmplayer)  [R]長押し 画面回転  [S]長押し 予定表 (poutlook calendar)  [T]長押し 仕事 (poutlook tasks)  [Z]長押し W-ZERO3メール (STMail)  [C]長押し コピー (Ctrl+[C] 相当)  [X]長押し 切り取り (Ctrl+[X] 相当)  [V]長押し 貼り付け (Ctrl+[V] 相当)  [Y]長押し アプリキー1 (設定の ボタン で割付可能)  [U]長押し アプリキー2 (設定の ボタン で割付可能)  [G]長押し アプリキー3 (設定の ボタン で割付可能)  [H]長押し アプリキー4 (設定の ボタン で割付可能)  [,]長押し かぎ括弧 "「" の入力  [.]長押し かぎ括弧 "」" の入力  [文字] IME の On/Off 切り替え  Ctrl+[文字] 文字種切り替え ◎W-ZERO3 の場合、[J]/[L] のソフトキーとカーソルキーがほぼ対称に配置されます。 ◎[Ctrl]キーは押しづらいので、[X][C][V] は長押しでも Clip&Paste できるよう  になっています。 ◎一部アプリは機種依存です。また一部アプリでは、インストールしたパスやプロ  グラム名が異なっている場合は、インストール場所を書き換える必要があります。 ●設定変更の仕方 設定はすべて付属の scriptcommand.txt に記述します。 ------------------------------------------------------------------------------- ◎長押し判定時間の変更 280行目 ------------------------------------------------------------------------------- 下記行の KEEPTIME の数値を書き換えます。40msec 単位なので 25で約1秒、20で 0.8秒です。実際はキーリピート速度の設定によって誤差が生じます。キーリピート 速度を速くしておくと誤差が減ります。 define KEEPTIME 20 ------------------------------------------------------------------------------- ◎キー割り当ての変更 770行目以降 ------------------------------------------------------------------------------- [Q][W][E]...[M] まで、各キー毎のアクションが記述されています。各キー毎に2つの アクションを記述します。書き換えるのは主に PUSHIMM の行です。 func _SELTABLE 'E'  ALLOCVSTATE 0  PUSHIMM <そのまま押した場合のアクション>  PUSHIMM <長押しした場合のアクション>  CALL _subGWKey endfunc  <そのまま押した場合のアクション> を _func_Default 以外に設定すると IME  が on の状態で文字入力できなくなるので注意してください。そのため、通常は  文字入力にさほど影響が無い [Q],[C] 等のキーにだけ割り当てます。  <長押しした場合のアクション> は特に影響が無いので、すべてのキーに割り当  てして大丈夫です。 ------------------------------------------------------------------------------- ◎[L]キーを文字入力に使いたい場合 965行 ------------------------------------------------------------------------------- [L]キーを、ローマ字入力の小文字入力のキーとして使いたい場合は、次のようにして 割り当てられている機能を解除してください。 PUSHIMM _func_SoftKeyR の行を PUSHIMM _func_Default に変更します。最終的には次のようになります。 # [L] キーの処理 func _SELTABLE 'L' ALLOCVSTATE 0 PUSHIMM _func_Default PUSHIMM _func_Exec # 長押し時 指定プログラムの起動 string 3 "\Windows\lightmailI.exe" # ライトメール CALL _subGWKey endfunc これで [L] は通常の文字キーに戻ります。 ●割り当てられるアクション一覧 _func_Nop ------------------------------------------------------------------------------- 何も動作を行いません。ボタンを押しても何の影響を与えたくない場合に 設定します。 ------------------------------------------------------------------------------- _func_Default ------------------------------------------------------------------------------- 押したボタン本来のキーの動作を行います。例えば [R] キーなら文字 'R' の送信を行います。 ------------------------------------------------------------------------------- _func_TaskChange ------------------------------------------------------------------------------- 現在起動中のプログラムの切り替えを行います。WindowsPC の ALT+TAB を 1 Window 単位で進めている感じです。 ------------------------------------------------------------------------------- _func_TaskClose ------------------------------------------------------------------------------- 現在アクティブな最前面のアプリケーションをクローズします。 ------------------------------------------------------------------------------- _func_SoftKeyL ------------------------------------------------------------------------------- 左ソフトキーとして機能します。WindowsMobile の左側のメニューボタンです。 ------------------------------------------------------------------------------- _func_SoftKeyR ------------------------------------------------------------------------------- 右ソフトキーとして機能します。WindowsMobile の右側のメニューボタンです。 ------------------------------------------------------------------------------- _func_PageUp ------------------------------------------------------------------------------- ページアップキーとして機能します。 ------------------------------------------------------------------------------- _func_PageDown ------------------------------------------------------------------------------- ページダウンキーとして機能します。 ------------------------------------------------------------------------------- _func_ClipCopy ------------------------------------------------------------------------------- クリップボードへのコピーを行います。[Ctrl]+[C] に相当します。 ------------------------------------------------------------------------------- _func_ClipCut ------------------------------------------------------------------------------- クリップボードへの切り取りを行います。[Ctrl]+[X] に相当します。 ------------------------------------------------------------------------------- _func_ClipPaste ------------------------------------------------------------------------------- クリップボードの内容を貼り付けます。[Ctrl]+[V] に相当します。 ------------------------------------------------------------------------------- _func_ClipExec ------------------------------------------------------------------------------- 文字列3番 (string 3 "〜") で指定したアプリケーションを起動します。 例えば GSPlayer2 の起動を [R] キーの長押しに割り当てるなら次のように なります。プログラム名はフルパスで書いてください。 func _SELTABLE 'R' ALLOCVSTATE 0 PUSHIMM _func_Default PUSHIMM _func_Exec string 3 "\Program Files\GreenSoftware\GSPlayer2.exe" CALL _subGWKey endfunc 文字列には引数を与えることもできます。この場合 string 行に文字列 "〜" を 2つ記述してください。 string 3 "\Program Files\ctrlswapmini\ctrlswapmini.exe" "-s" プログラム (*.exe) 以外でも構いません。例えば *.txt を与えると関連 付けされているエディタが起動しますし、*.html を指定すればブラウザが 開きます。 string 3 "\My Documents\manual.html" ------------------------------------------------------------------------------- _func_ClipWinKey ------------------------------------------------------------------------------- スタートメニューを開く [Win] キーを割り当てます。 ------------------------------------------------------------------------------- _func_ClipRotate ------------------------------------------------------------------------------- 画面を回転します。 ------------------------------------------------------------------------------- _func_App1 〜 _func_App6 ------------------------------------------------------------------------------- アプリケーションキーとして機能します。アプリケーションキーは、設定 画面の「ボタン」でさまざまなプログラムを割り当てることができます。 機種によって、割り当てできるアプリケーションキーの個数が異なります。 ------------------------------------------------------------------------------- _func_KeyCodeA ------------------------------------------------------------------------------- 任意のキーコードを送信します。割り当てるキーコードは SETVAR2 命令で 指定します。例えば 'F' キーをそのまま押した場合の動作にカーソル [↑] を割り当てるなら次のようにします。 func _SELTABLE 'R' ALLOCVSTATE 0 PUSHIMM _func_KeyCodeA PUSHIMM _func_Nop # 長押しは何もしない SETVAR2 VK_UP CALL _subGWKey endfunc ------------------------------------------------------------------------------- ●より高度なカスタマイズ キーにより複雑なシーケンスをあり当てる場合は、自分で関数定義することができます。 例えばテキストファイルの一番最後に次のような記述を追加します。最後の RETURN 0 を忘れないでください。 func TABLE_FUNC 0x90 SENDKEY 'A' SENDKEY 'B' SENDKEY 'C' RETURN 0 endfunc 各キーのアクションの指定に、_func_〜 の代わりに 0x90 と記述するだけで、 上記関数が呼ばれます。この場合「 A B C 」の 3キーが順番に押された状態を作り 出します。 # 割り当ての例 [A] 長押しで 0x90 を実行する func _SELTABLE 'A' ALLOCVSTATE 0 PUSHIMM _func_Default PUSHIMM 0x90 # <<<<ここで自分で定義した 0x90 番を呼び出している SETVAR2 VK_UP CALL _subGWKey endfunc この場合、0x90 は 16進数で指定した関数番号です。0x90、0x91、0x92〜 は未使用 なので自由に使って構いません。 関数定義を使うと、いくらでも長いキーシーケンスを登録することが可能となります。 また条件判断も可能で、前回の状態を記憶しておくことも可能です。 関数の中にはさまざまな命令を記述することができます。詳しくは em1key のスクリ プトマニュアル em1keyscript.txt を参照してください。 http://flatlib.main.jp/dench/vec/more/em1keyscript.txt よく使うスクリプト命令 SENDKEY キーコード キーの DOWN と UP のペアを送信します RAWDOWN キーコード キーを押した状態 (DOWN) にします RAWUP キーコード キーを離した状態 (UP) にします ●キーカスタマイズの基礎知識 Windows のキーボードは、押したタイミングと離しタイミングの 2つのイベントを 持っています。離した状態も管理することで、複数のキーが同時に押されている状 態や押し続けているかどうかの判定が可能となります。 そのため何らかのキーの動作をシミュレートするには、押した状態(KEYDOWN)と 離した状態(KEYUP)の2つのキーコード送信が必要となります。KEYUP を忘れると、 ずっと押しっぱなしとみなされるので注意してください。 SENDKEY コマンドは、常に KEYDOWN と KEYUP をペアで送信します。つまり  SENDKEY 'A' と書くだけで、キーを押して離した状態を簡単に作り出すことができます。その 代わり押しっぱなしなどの細かい制御を行うことができません。 RAWUP / RAWDOWN は、押した状態と離した状態をそれぞれ別々に与えるコマンド です。より低レベルな制御が必要な場合に使用してください。 キーボードに割り当てられるコードは Windows の仮想キーコードで、ハードウエア を問わず一定になります。シンボルには VK_ で始まる名前が割り当てられています。 例  [BS]キー VK_BACK  [SHIFT]キー VK_SHIFT アルファベットキー A〜Z と数字キー 0〜9 は、アスキーコードと仮想キーコードが 一致しているので、文字定数 'A'〜'Z' や '0'〜'9' を使うことができます。それ以 外のキーは一致しないことがほとんどなので、VK_ で定義されてシンボル名を使う ことをお勧めします。 ●キー判定のタイミングについて キーを認識するタイミングは次のようになっています。 ・通常の入力 キーを離したときに有効です。キーリピートはしません。 ・長押し 押し続けて一定時間経過したら有効になります。一度認識したらキーを 離すまで次の認識は行いません。つまりリピートしません。 ●プログラムについて W-ZERO3 や EM・ONE は、0〜9 や A〜Z までフルに打てる便利なキーボードを内蔵 しています。日本語も英字も文字入力中は便利なのですが、普段アプリケーション を実行したり、メニューの操作するには少々物足りません。 スライドさせてキーボードを使ってる状態だと、左右のソフトキーが遠かったり、 [Fn]キー との組み合わせでないと操作できなかったりするからです。 何とか使いやすくしようといろいろ考えてできたのが、ひとつは em1key デフォル ト設定の  ・数字キー [0]〜[9] をファンクションキーにしてしまう方法 で、もう1つがこのプログラム gwkeywm の  ・ローマ字入力状態の使わない動作をうまく利用する方法 です。この両者は機能的に重なっていないので、両方を有効にした設定ファイルを 作成したらもっと便利になるかもしれません。 2007/05/05 1.00 Hiroyuki Ogasawara http://www.vector.co.jp/authors/VA004474/wince/wince.html