その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
(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キー(0x31キー)を押し下げ
- Repeat10Key.exe 実行
- [1あ]キーを離したとき
- 1キー(0x31キー)を押し上げ
となっている。
[1あ]キーを押すたびにRepeat10Key.exe が実行されるが、0x31キーが一定時間押された場合にはじめて、連続入力を開始するようになっている。
ほんとは、SortInchKeyで「長押し」ないし「リピート」に動作を割り当てることができれば楽なんだけど、それができないので、「押し」と「離し」に割り当てるという苦し紛れな仕組みになった。
キーフックを使えばもっとスマートに実現できるだろうけど、常駐ソフトが増えることになるからなあ
バイナリzipとソースはこのフォルダから。
その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 |
一回でもキーストロークを少なくするための小ネタ集
公開しているソフトについて:使う人は殆どいないでしょうが、自己責任でお願いします(プログラミング初心者ですから予想外のトラブルが起こるかもわかりません)。
※eMbedded Visual C++ 4.0、POCKET PC 2003、WCE ARMV4 Release でコンパイルしています。
ソースをコンパイルする場合は、eMbedded Visual C++ 4.0、eMbedded Visual C++ 4.0 SP4、POCKET PC 2003 SDKの三つをダウンロードしてください(すべて無料)。
MortScriptもかなり便利!
MortScriptを使えば、手軽に高度な処理を行うことができる。
①起動後数字入力モードにする、起動後マナーモードを解除し、終了後マナーモードにする
SetMannerというソフトをここからダウンロードしておく。
以下のサンプルは、CorePlayer起動前にマナーモードだった場合のみ、CorePlayer終了後マナーモードに戻してバイブレーションで知らせる、というもの。
<CorePlayer を便利に起動する>manner = RegRead("HKCU", "Software\Sharp\PhoneStatus", "Status3")
if (manner eq "1")
Run("\Program Files\SetManner\SetManner.exe", "/off")
endif
RunWait("\Program Files\CorePlayer\player.exe")
if (manner eq "1")
Run("\Program Files\SetManner\SetManner.exe", "/on /ansback")
endif
Exit
②零号エディタがアクティブであるときに、特定のキー入力をするようにする
このスクリプトを、キーの一つに割り当てれば、
零号エディタ以外がアクティブ → YTaskMgr を起動
零号エディタがアクティブ → Ctrl+m を実行(メニュー表示)
といった処理が可能になる。
零号エディタのような固定クラス名を持っていないアプリ(ほかには EBPocket など)は、プロセス名で指定するのが手っ取り早いが、MortScript を使えば簡単に実現できる。
<アクティブプロセスの違いで処理を分ける>m = ActiveProcess()
If (m eq "LHEdit.exe")
Run("\Program Files\KeyInputEmulator.exe", "Ctrl+m")
Exit
EndifRun("Program Files\YTaskMgr\ytaskmgr.exe")
Exit
ExecMulti は超便利!
このソフトは、execmulti.iniに書き込むことによって、便利な動作が実現できる。ももらぼっ!からダウンロードできる。
①ソフト起動後数字入力モードにする
ChgInputModeというソフトが「w-zero3日和」からダウンロードできるので、インストール。
53#"\Program Files\ChgInputMode\ChgInputMode.exe" -1 -aw
という内容(強制的に数字入力モードにする)のショートカットを作っておくと便利だろう。
execmulti.ini に以下のように記述する。
[ebpocket]
exec=\Program Files\EBPocket\EBPocket.exe
sleep=4000
exec=\Program Files\ChgInputMode\ChgInput.lnk
これで、ebpocketのオプションつきでExecMultiを起動すると、EBPocket起動後数字入力モードになる。「ツール」→「オプション」→「Keycode」でテンキーを割り当てておくと便利。
②ソフト起動後マナーモードを解除し、終了後マナーモードにする
SetMannerというソフトをここからダウンロードして、execmulti.ini を編集すればよい。
[wplay]
exec=\Program Files\SetManner\SetManner.exe|/off
execSync=\Windows\wmplayer.exe
exec=\Program Files\SetManner\SetManner.exe|/on
ただし、MortScriptを使った方が気の利いた処理ができる(後述)。
07/10/1追記:以下に①と②を組み合わせる方法について記していたが、複雑になるので、①については Atoksetを用いた方が楽。ssipa's WindowsCE freewareで入手可。
さらに、起動後に数字入力モードにしたい場合には、少し工夫がいる。
まず、\Program Files 以下に ExecMulti2 フォルダをつくり、ExecMulti.exc を ExecMulti2.exe とリネームしてコピーする。execmulti2.ini というファイルも作る。
execmulti.iniに 以下のように記述する。
[wplay]
exec=\Program Files\SetManner\SetManner.exe|/off
exec=\Program Files\ExecMulti2\execmulti2.exe|wp
sleep=1500
exec=\Program Files\ChgInputMode\ChgInput.lnk
そして、execmulti2.ini に以下のように記述する。
[wp]
execSync=\Windows\wmplayer.exe
exec=\Program Files\SetManner\SetManner.exe|/on /ansback
これで、wplayer のオプションつきで ExecMulti を起動すると、Windows Media起動前にマナーモードが解除されて、起動後数字入力モードになり、終了後マナーモードになる。Windows Media のオプション設定で、テンキーを割り当てておくとよい。
テンキーからの記号入力補助
PasteHelper2というソフトを使うと記号入力が楽になるかも。
「BUGだらけ」に使い方が載っており、記号満載の XML ファイルも手に入る。私はこれを、少し改変して使わせていただいている。
テンキーで操作できるので、ExecMultiを使って起動時に数字入力モードになるようにするのがよい(下記参照)。
ソフトのページはここ。
mee_changの日記〜きれそうなわたしの12か月〜
/ncつきで起動すると、クリップボード表示機能なしで起動するので、より記号入力に特化したソフトになる。
Today画面でソフトキーからメニューを表示
JUcrabというソフトが便利。「HTC Universal を 使おう!」からダウンロードできる。