その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とソースはこのフォルダから。