一回でもキーストロークを少なくするための小ネタ集

公開しているソフトについて:使う人は殆どいないでしょうが、自己責任でお願いします(プログラミング初心者ですから予想外のトラブルが起こるかもわかりません)。
※eMbedded Visual C++ 4.0、POCKET PC 2003、WCE ARMV4 Release でコンパイルしています。
 ソースをコンパイルする場合は、eMbedded Visual C++ 4.0eMbedded Visual C++ 4.0 SP4POCKET PC 2003 SDKの三つをダウンロードしてください(すべて無料)。

その1.コピペを手軽に(CopyEmulate、ToggleShift など)

[概要]

(1)Ctrl+C、Ctrl+Xキー入力とShiftキートグルを行うだけのプログラム

(2)CopyEmulate.exe、CutEmulate.exe

Ctrl+C ないし Ctrl+ Xをエミュレートする
Shiftキー押下げ状態の場合は、自動的に Shiftキーを押し上げる

(3)ToggleShift.exe

Shiftキーを単純にトグルするだけ
オプションに down指定で、押し下げのみ
オプションに up指定で、押上げのみ


[公開した後に気づいたこと](07/10/3 追記)


1. InputEmulate.exe のコマンドファイルに 、T \S ではなく、T \0x10 と書けば、Shiftキーを単純にトグルしてくれる
2. KeyInputemulator.exe Ctrl+c ↑shift とか、KeyInputEmulator.exe Ctrl+x ↑shift ってすれば、Shiftキー押下げ状態を解除してくれる
3. つまり、InputEmulate.exeとKeyInputEmulator.exe を持っている人に、このソフトは不要だと思う。パラメータ指定がめんどくさいという人向け


[ダウンロードとインストール]


ダウンロードはこちらから(CPTools.cab)。
Cabファイルをインストールすると、\Program Files\CPTools\ 以下に

    • CopyEmulate.exe
    • CutEmulate.exe
    • ToggleShift.exe

がインストールされる。

バイナリZipとソースはこちらのフォルダで。


[esMojiKeyとの連携]


esMojiKeyの起動オプションは、/DefaultInput=7 がベスト。ソフト呼出し後は必ず数字入力モードになるが、慣れればそれほど戸惑わない。

現在の esMojiKey.ini は以下の通り。
1行目の PLUSi_Launch.mscrについては、「その4.記号入力を手軽に」を参照。

\Program Files\PLUSi_Launch.mscr
\Program Files\KeyInputEmulator.exe|Ctrl+s
\Program Files\KeyInputEmulator.exe|Ctrl+q
\Program Files\CPTools\CopyEmulate.exe
\Program Files\CPTools\CutEmulate.exe
\Program Files\KeyInputEmulator.exe|Ctrl+v
\Program Files\KeyInputEmulator.exe|Ctrl+z
\Program Files\KeyInputEmulator.exe|Ctrl+a
\Program Files\YTaskMgr\YTaskMgr.exe
\Program Files\KeyInputEmulator.exe|Home
\Program Files\CPTools\ToggleShift.exe
\Program Files\KeyInputEmulator.exe|End

表にするとこんな感じ。

1 記号入力
 (PLUSi)
2 上書き保存
 (Ctrl+S)
3 終了
(Ctrl +Q)
4 コピー
 (Ctrl+C)
5 カット
 (Ctrl+X)
6 ペースト
 (Ctrl+V)
7 元に戻す
 (Ctrl +Z)
8 すべて選択
 (Ctrl+A)
9 YTaskMgr
Home 0 Shiftキートグル End

その2.数字キーの連続入力(Repeat10Key)

2008/3/1更新

[概要]

(1)キーボードを出して、適当なキーを長押ししてみると、文字が連続入力されると思う(ちなみに、この連続入力の速度は、「設定」 → 「ボタン」 → 「上/下コントロール」での設定と連動している)。このソフトはテンキー側でこのような動作を実現するもの。

(2)数字キーに所定の動作を割り当てることができるソフト(EBPocket, TCPMP, GSPlayerなど)での操作が楽になるかも。

(3)特に、EBPocket でスムーズにスクロールできるようにするため。(その説明についてはこちら

(4)別の使い道として、\Application Data\Opera\input.ini に、

1 = scroll up
3 = scroll down

と書くと、Opera で1行スクロールがスムーズにできる。


さらに、a nomalyさんが MangaMeeyaでのページめくりに Repeat10Keyを使用する方法を紹介してくださっている。とても分かりやすいので、他のソフトに導入する場合も参考にできる。最後の画像を見てもられば、本ソフトのイメージがよくつかめると思う。当時とはパラメータの指定が若干変更しているのでその点だけ注意。
「Repeat10key で MangaMeeya」


[制限事項]

  • SortInchKey 必須
     SortInchKeyでキーに Repeat10Keyを割り当てて使用するため
     SortInchKeyの設定方法一般についてはここのページがわかりやすい(ただ、アプリをタイトル名で指定するとシステム全体の動作が遅くなることがあるので、クラス名で指定すべき。クラス名を調べるには、XiForeWindowInfo などを使えばそれほど苦労しない)
  • システムに若干の負荷がかかる
     Repeat10Key自体は常駐しないが、システム全体で連続入力するように設定した場合、数字入力をするたびに Repeat10keyが起動するため、システムには若干負荷がかかる。しかし、体感速度が遅くなるようなことはない。
  • 連続入力するのは100回に制限
     数字キーが押下げのままになってしまった場合の安全策として、連続入力する回数を100回に制限している
  • *と#キーには対応していない(キーコードが特殊なため)


[更新履歴]

  • v0.0.4 2008/3/1
    - 実行ファイルを1つにした関係で、正しく動作していなかった部分を修正
    - ctrlswapminiとの共存の問題への対処が不完全だったのを修正
    - パラメータの指定に誤りがある場合、エラーメッセージを表示するようにした
  • v0.0.3 2008/2/26
    - 実行ファイルを一つにした関係で、パラメータを若干変更。動作に変更はなし
    - Cabファイルを作成
  • v0.0.2 10/16
    - 0xd0、0xd1等のキーコードを使用せずに長押し状態を検出するようにした。SortInchKeyの設定もシンプルで済むように。また、[1あ]キー押下げ直後にクリアキーを押すと誤作動する問題に対処
  • 10/8 早朝
    - デフォルトの連続入力間隔をかなり速めに。パラメータの最小値を引下げ。連続入力回数の制限を緩和
  • 10/6
    - パラメータで指定できる項目を増やした
  • v0.0.1 2007/10/2
    - ctrlswapminiとの共存の問題※で、[あ1]キーを押した場合、ATOKの入力モードが[A][a][_A][_a]の場合のときは連続入力モードに入らないように変更した
    ※ctrlswapmini には「入力モードが[A][a][_A][_a]の場合 [1あ] の入力で途中に 1 が入ってしまいます。」といった問題があって、Repeat10key1.exe が誤作動してしまう


[ダウンロードとインストール]

1.AtokChanger のインストール

このソフトは、半角英字入力時に ATOKをオフにするソフトだが、数字入力時に ATOKがオンになることも防いでくれる。ここ(星羽さんのw-zero3日和)で公開されている。
2008/2/26追記:なお、AtokChangerには、「縦画面で英数字モードにしたあと横画面時にすると、半/全ボタンを押しても ATOKをオンにできない」という、気になる人には気になる不具合がある。幸いにも本ソフトはソースが公開されているので、この問題に対処してみたものを作ってみた(ここからダウンロード可)。
2008/3/1追記:ウィンドウが変更されたときに、ATOKがオフにならないことがあったので修正

この対応版は、数字入力時に ATOKをオフにすることに特化したもので、英字入力モードでは ATOKをオフにしない。というのは、ctrlswapmini のAd[es]対応バージョンでは、設定画面の「IME制御(Atok用)」にチェックを入れると、ATOKをオフにし、さらに右キーの補正も行ってくれるので、こちらに任せた方がよいと思ったからだ。
要するに、Repeat10Keyを使用しない→ctrlswapmini だけをインストール
Repeat10Keyを使用する→ctrlswapmini とAtokChanger修正版 をインストール
とするのがおすすめ。

2.Repeat10Key004.cab をここからダウンロードして、インストール

ver0.02までのRepeat10key0〜9.exe は削除してかまわない

3.以下の定義を SortInchKey.ini 内の [Define]欄に付け加える

SortInchKey.iniは \Program Files\SortInchKey にある

0=0x30
1=0x31
2=0x32
3=0x33
4=0x34
5=0x35
6=0x36
7=0x37
8=0x38
9=0x39

4.SortInchKey でキーを割り当てる

SortInchKeySettingsを使うか iniファイルをエディタで直接編集するかはお好きな方で

4-1<特定のソフトでのみ連続入力したい場合>

SortInchKeySettingsを使って設定する例( Operaで 3キーを連続入力させたいとする)

(1)スキャンコード※を指定

モード→「押し・長押し・離し」を選択
アクティブアプリ条件→「クラス」を選択、OpWindow と記入(クラス名については、大文字と小文字は区別されるので注意)。

※誤動作防止のため、スキャンコードの指定を忘れないこと。スキャンコードを調べるには、SortInchKeyのページからダウンロードできる XiKeyTest が便利。Ad[es]のスキャンコードは以下の通り。

0キー…0x32   1キー…0x33   2キー…0x34
3キー…0x35   4キー…0x36   5キー…0x37
6キー…0x38   7キー…0x39   8キー…0x3a   9キー…0x3b

(2)「押し」に、

「アプリ実行」
 ファイル→\Program Files\Repeat10Key\Repeat10Key.exe
 パラメータ→3
「キーダウン」
 コード→3

と設定する。


(3)「離し」に、

「キーアップ」
 コード→3
と設定する。


そうすると、iniファイルには以下のように書き込まれる。

[]
code=3
with=
scan=0x35
mode=push
direction=both
activeKind=class
activeName=OpWindow
exec=\Program Files\Repeat10Key\Repeat10Key.exe|3
keyDown=3

[]
code=3
with=
scan=0x35
mode=release
direction=both
activeKind=class
activeName=OpWindow
keyUp=3

4-2<EBPocketのようにクラス名が一定でないソフトで使う場合>

SortInchKeyで個別に登録できないため、システム全体に割り当てる(ただし、Today表示時と電話番号入力時には割り当てない)。
この場合、同梱のサンプルファイルを用いて、テキストエディタで編集する方が楽。
サンプルファイルは、\Program Files\Repeat10Keyにインストールされる。
 Use10Key*を使用している方→sample_SortInchKey.ini の内容を
 使用していない方→sample_SortInchKey.ini の内容を
そのまま SortInchKey.ini の末尾に付け加えれば、OK。
これらのファイルは、ここにも置いてある。

*Use10Keyは、kazuakiさんが公開しているソフト( ここからダウンロード可)

5.SortInchKey 再起動、もしくは、システム全体を再起動( SortInchKeySettingsを使用したときは、再起動は不要)


[パラメータ](v0.0.3で変更)

第1引数・・・連続入力するキーの数字

 ←0〜9の範囲で必ず指定する

第2引数・・・{連続入力する間隔},{キーを押してから連続入力するまでの時間}

 ←ミリ秒単位で入力してください。最小値はそれぞれ 50,300。
  この引数は省略可。その場合は、100,400 となるが、遅く感じるかもしれない。
  それぞれの数値の間は ,(カンマ)で区切り、半角スペースは入れない。

第1引数と第2引数の間は半角スペースのみ。

ex.
Repeat10Key.exe 1 50,400
(SortInchKey.ini では、exec=\Program Files\Repeat10Key\Repeat10Key.exe|1 50,400)
とすると、キーを押してから0.4秒後に、0.05秒間隔で連続入力する。


[動作環境]


動作確認は Ad[es] のみだが、W-ZERO3 シリーズなら問題ないと思う。その他のデバイスでも、SortInchKeyが動くのであれば、動作するはず(ただ、スキャンコードを正しく指定する必要があると思う)。



[本プログラムの仕組み]


[1あ]キー押下げの場合に即して簡単に説明させていただくと、SortInchKeyの設定は

  1. [1あ]キーを押したとき
    • 1キー(0x31キー)を押し下げ
    • Repeat10Key.exe 実行
  2. [1あ]キーを離したとき
    • 1キー(0x31キー)を押し上げ

となっている。
[1あ]キーを押すたびにRepeat10Key.exe が実行されるが、0x31キーが一定時間押された場合にはじめて、連続入力を開始するようになっている。

ほんとは、SortInchKeyで「長押し」ないし「リピート」に動作を割り当てることができれば楽なんだけど、それができないので、「押し」と「離し」に割り当てるという苦し紛れな仕組みになった。
キーフックを使えばもっとスマートに実現できるだろうけど、常駐ソフトが増えることになるからなあ


バイナリzipとソースはこのフォルダから。

その3.Lode とスタートメニューの併存

Nord_jpさん作の Lodeと LodeSettingは、メニュー形のランチャソフトで、軽いし、テンキーで操作できるし、設定が楽なのでとても便利。Winキーに割り当てて使っている。しかし、スタートメニューが全く使えないのも不便。そこで、SortInchKeyを使って、Lode起動時に左ソフトキーを押すことでスタートメニューを表示するようにする。

SortInchKey.ini を編集する。
[Define]以下に、文字キー+Enter キーの同時押しのキーコードを追加。

WIN2=0x5c+0x76+0x0d
そして、以下の記述を追加( SortInchKeySettingsをつかってもよい)。
[]
code=SOFT1
with=
scan=
mode=short
direction=both
activeKind=class
activeName=LodeSetting
keyClick=SOFT1

[]
code=SOFT1
with=
scan=
mode=short
direction=both
activeKind=class
activeName=Lode
keyClick=WIN2

なぜか LodeSetting起動時もスタートメニューが開いてしまうので、先に SOFT1 を割り当てておく。

その4.記号入力を手軽に

PLUSiというソフトがお勧め。定型文・記号入力ソフト&クリップボード管理ソフトで、起動以外はテンキーだけで操作できてかなり便利(PasteHelper2から乗り換えた)。

ただ、起動キーが Ctrl+. で、デフォルトで表示されるアイコンを消すキーが Ctrl+, なので、テンキーだけだとちょいと困る。
そこで、起動用 MortScriptを書いてみた。

[PLUSi_Launch.mscr]の内容
### PLUSi.exeが起動していないときは、起動して、アイコンを消す。
### その後、ウィンドウを表示。

If (NOT ProcExists("PLUSi.exe"))
Run("\Program Files\PLUSi.exe")
Sleep(100)
Run("\Program Files\KeyInputEmulator.exe","Ctrl+")
Sleep(100)
Run("\Program Files\KeyInputEmulator.exe","Ctrl+")
Else
Run("\Program Files\KeyInputEmulator.exe","Ctrl+")
Endif
Exit

アイコンを表示させないと、プログラムを完全に終了させることができないので、PLUSi起動時にウィンドウを閉じて、アイコンを表示させる MortScriptも書いてみた(うちでは SortInchKeyで0キーに割り当て)。

[PLUSi_icon.mscr]の内容
### PLUSiのウィンドウを消して、アイコン表示のトグルキーを押す。
### PLUSi.exeがアクティブでないときは、何もしない。

m = ActiveProcess()
If (m eq "PLUSi.exe")
Run("\Program Files\KeyInputEmulator.exe","↓+↓+↑")
Sleep(300)
Run("\Program Files\KeyInputEmulator.exe","Ctrl+")
Endif
Run("\Program Files\KeyInputEmulator.exe","Ctrl+")
Exit