top
[Index(X)][Back(B)]

理想十鍵

画面写真

※画像をクリックすると、原寸大で表示されます。

通常のキー配置
スイッチキーで切り替え その1 スイッチキーで切り替え その2 スイッチキーで切り替え その3

作品情報

作品名:
理想十鍵(りそうじっけん)
作者名:
はりまお
制作環境:
Core i7-4770 3.40GHz + 8GB RAM
Windows 10 Pro (64bit)
開発言語:
Visual  Studio  Express  2013  for  Windows  Desktop (Visual  Basic  2013)
動作環境:
.NET Framework 4.5
形態種別:
フリーソフトウェア(オープンソース)

ファイル

"Ideal10Key.zip"・・・[ダウンロード] (配布ファイル更新日:2025年01月27日)
名前バージョン概容
Ideal10Key.exe1.4.0.3実行ファイル
PadKey_Sheet0.txtパッドキー定義ファイル
PadKey_Sheet1.txt
PadKey_Sheet2.txt
PadKey_Sheet3.txt
readme.txt説明文(本文と同じ)
Ideal10Keyソース収録フォルダ(不要なら削除可)


概要

本作を一言でいえば、『文字を切り替えられる仮想テンキー』です。もちろん、切り替えるキーは変更できます。

「テンキーをこんな風にして欲しい」と誰かに伝えるために(そんな力も人脈もないので絵に描いた餅ですが)、そのイメージをソフトウェア上で再現した実験的プログラムです。
というわけで、“ソフトウェアキーボード”であってキーボードカスタマイズソフトではありませんので、お間違いのないように。実際のテンキーを使って入力することはできませんが、その雰囲気は伝わると思います。

インストール・アンインストール

本作の使用には、『.NET Framework 4.5』をあらかじめ導入しておく必要があります。.NET Frameworkの導入方法は、OSによって異なるのでネットで調べてください。

インストールは、ダウンロードした圧縮ファイルの中身を、適当な場所に作成したフォルダに解凍してください。
パッドキー定義ファイルは、必ず実行ファイルと同じフォルダに置いてください。

アンインストールは、解凍先のフォルダをまるごと削除するだけです。このプログラムは、レジストリにも記憶媒体にも一切手を出してません。

使い方

起動

起動は、"Ideal10Key.exe"を実行するだけです。

本作は、コマンドライン引数によって起動時の設定を行えます。設定の保存機能の代わりに使ってください。使い方は、実行ファイルのショートカットを作ってその“リンク先”の末尾に下記の引数を書き加えるだけです。大文字・小文字や順序は問いません。

引数名初期値意味
/HO------手動伸縮にする。
/NA------Altキーを送信しない。
/UD=1 ~ 使用画面数1使用するディスプレイの番号をしてする。
/OP=0.1 ~ 0.90.5ウィンドウの不透明度を指定する。
数値の前に"+"を付けると透過した状態で起動します。
/LB------画面左下に表示する。

起動すると、画面右下に小さくアイコンが表示されます。

入力

画面右下に置かれたアイコンにマウスポインタを近づけるとウィンドウが広がり、入力できるようになります。

テンキーに似た“パッドキー”(00~16)をクリックすれば、アクティブになっているウィンドウにその文字が入力されます。

パッドキーの左下に並ぶ“スイッチキー”(S1~S3)をクリックすれば、パッドキーの割り当てを切り替えられます。
また、スイッチキーからパッドキーへドラッグ&ドロップを行うことで、その1回だけ切り替えた文字を入力することができます。
スイッチキーの代わりに、Shift,Ctrl,Altキーを使うこともでき、それぞれのキーを押している間だけ、パッドキーが切り替わります。この場合、キーを押している間は送信する文字を溜めておき、キーを放した時にまとめて送信されます。これは、ショートカットキーとして認識されてしまうのを避けるためです。Altキーは、単独でメニューバーにフォーカスを移す機能を持っているため、入力内容を送信する前にAltキーを送信します。
一括送信するために溜められた入力内容は、パッドキー上側で確認でき、ボタンで前回の入力内容を取り消したり、ボタンで全て取り消したりもできます。

キー配置図
キー配置図
   00~16   ・・・パッドキー
// S1~S3 //・・・スイッチキー

メニュー

左上のアイコンを右クリックすれば、メニューが開きます。

メニュー解説
手動伸縮ウィンドウの伸縮をアイコンのクリックで行うかを選択します。
[Alt]キー送信Altキー解放後にAltを送信してメニューバーからフォーカスを奪い返すかを選択します。
半透明ウィンドウを半透明にするかを選択します。
ディスプレイ使用するディスプレイを選択します。ウィンドウが伸縮するときに適用されます。
左/右スナップ位置を画面左下と右下で切り替えます。
バージョン情報バージョンを確認できます。
終了理想十鍵を終了します。

パッドキーの定義

パッドキーに割り当てる文字の指定(“キーシート”と呼ぶ)は、キースイッチ毎のテキストファイル(UTF-8)に記述し、実行ファイルと同じフォルダに置きます。
キーシート0がない場合は、起動できません。キーシート1~3がない場合は、対応するスイッチキーが無効になります。

定義ファイルの種類
"PadKey_Sheet0.txt"
(キーシート0)スイッチキーが押されていない時の割り当て
"PadKey_Sheet1.txt"
(キーシート1)スイッチキー1が押された時の割り当て
"PadKey_Sheet2.txt"
(キーシート2)スイッチキー2が押された時の割り当て
"PadKey_Sheet3.txt"
(キーシート3)スイッチキー3が押された時の割り当て
定義ファイルの記述要件
  • 左上のキーから右へ、そして下への順番(キー配置図の番号順)で列記する。
  • 1キー1行。
  • 表示する文字列と送信する文字列を Tab で区切る。
  • 送信文字列は、《WshShell》オブジェクトの《SendKey》メソッドのキーストローク文字列式を指定する。 .NETの《SendKeys.Send》メソッドのキーストローク文字列でも同じです。
  • 使用しないキーは空行にする。
  • 末尾の空行は省略できる。

余談ですが、今回収録しているキーシート2と3は、別段考えのある配置ではありません。シート2は、Num Lockを削除した代わりとして。シート3は、キーボード上段辺りの記号を並べただけです。個人的には、シート1で事足りてしまったので。

プロジェクトについて

プログラム全般

全く難しい部分はないと思います。好きなように改造してください。

キーの送信方法

.NETの《SendKeys.Send()》ではカレット("^")が送信できない不具合があるため、WSH側の《SendKeys()》を使用しています。

ちなみに、.NETの不具合を具体的に書くと、《SendKeys.Send("{^}")》を実行すると"&"が表示されます。
これは、.NETさんは「"^"は英語キーボードでShift+6だよね」と解釈して送信 → それを受信したOSさんは「Shift+6は日本語キーボードで"&"だね」と理解するという、カルチャーショックな現象なんだそうです。昔から存在する問題で、WSHなら正常に意思疎通できているところを見ると、技術的な問題ではなくてMicrosoftの.NET担当者にこの2者を取り持とうという気などさらさらないというだけのようです。

Altキーの特殊性

Altキーは、単体でメニューバーにフォーカスを移す機能を持っています。そのため、スイッチキーの代りにAltキーを使用してパッドキーを入力し、その後Altキーを解放した場合、メニューバーが選択されてしまい文字入力ができません。
そこで、Altキー解放と同時にAltを送信し、フォーカスを奪い返すようにしています。しかし、これで万事上手く行くのか自信がなかったので、この機能の有効/無効を切り替えられるようにしています。

パッドキーの配置

今回採用するキー配置について、タイプAにするかタイプBにするか迷いました。
この二つの違いは、スイッチキー1(S1)をパッドキーの下に押し込むかどうかなのですが、個人的にはシート1が重要なので、スイッチキー1を押しながらパッドキーを押し易いであろうタイプAを選択しました。しかし、現実のキーボードの形状を大きく変えることなく収められるタイプBも捨てがたいと思います。

キー配置図
タイプAタイプB
キー配置 タイプA キー配置 タイプB

アイコン画像

Windows XPから8.1へ移行して、エキスプローラに表示されるアイコンの寸法が大きくなったので、調子に乗って256*256ドットの画像を用意してアイコンを作成したところ、ファイルサイズが激増してしまった。
使用している画像が異なるので厳密な比較ではないけど、それにしてもアイコンが実行ファイル要領に与えるインパクトがこれほど大きいとは驚いた。

画像サイズ色数アイコン容量作成方法
以前16*16
32*32
4ビット色1.05KBアイコン作成ソフトで直接描画
今回16*16 (277バイト)
32*32 (454バイト)
256*256 (39,398バイト)
32ビット色269.00KBPNG画像を「@icon変換」で変換
参考16*16 (277バイト)
32*32 (454バイト)
48*48 (2,842バイト)
32ビット色14.70KB

アイコン画像だけにとどまらず実行ファイルの容量に与える影響も大きい。理想十鍵プログラムの実質的な部分は50KB程度だと思うんだけど、256*256ドットを加えただけで+500KB近く増加するなんて…。あれ、50KB+269KB=577KB…何がどうなっているんだか???
「世間一般に公開されているフリーソフトの容量はなぜあんなに大きいのか?」と疑問に思っていたけど、それは“真っ当なアイコンを付けているから”というのもあったのかと(もちろんプログラムの質というのもあるでしょう)、また一つ勉強しました。

開発こぼれ話

実は、2007年に初代“理想十鍵”を創ったのですが、その時も.NETの《SendKeys.Send("^")》の問題にぶち当たってクリップボード経由でキーを送信してたり、キーの割り当てを変更できない仕様だったりと、自由度が低いわりにコードが複雑な何だかシックリこない出来で、Ver.1に昇格できずに半ばお蔵入りみたいな扱いになってた。
ところが、何かの拍子に『入力した内容を1手ずつ戻るには、スタックを使えば良いのか!』と気づいて、そしたら無性に“理想十鍵”を創り直したくなって作業を開始してみたら、案外普通な感じに仕上がったので、とりあえず完成ということになりました。制作過程でネットをあさっていたら、WHSでSend問題も解決できることが判明したし、万々歳。

MSXでBASICを覚え、X68kにあこがれ、仕方なしにPC-98を使っていたオールドタイプなパソコン野郎が、IBM-PC/AT互換機(Windows 3.1)を使うようになって頭の奥へ胸の奥へと抑え込んできたもの、それが、“テンキーに対する不満”。

「なんで、コンマが打てないんや~!!」
「なんで、イコールが打てないんや~!!」
「なんで、0,+,Enterが大きいんや~!!」
「右手だけで座標や16進数を打ちたいんや~!!」
Num Lock要らんやろ~!!」

とかね。そりゃ、IBMさんにも言い分はあるでしょうけど。オフィス系ソフトには目もくれず、ただひたすらに温~くプログラミングに浸っていたい自分には合わなかったわけやね。
そんな鬱憤をプログラムの力を借りて具現化したのが、今作です。

もちろん、キーボードカスタマイズソフトやプログラマブルキーボードなんかも探したんやけど、思うようにいかなかったり、高価だったりで。
そんな中、2013年に発見したのが、サイズさんの「楽々キーボード3」という超お値打ちプログラマブルキーボード。買っちゃいました。今は、これで満足していたりします。なので、それほど理想十鍵の出番はなかったりします(酷い、酷過ぎるぅ~)。
キーボードカスタマイズソフトでは、『Keyboard Butler ~鍵盤の執事くん~』というのが使い易かったですよ。

本作では、マウス入力を前提とした実装となっているため、実際のキーボードとして体現する際は不要な機能が付いています。スイッチキーがトグルになっている必要もなければ、ドラッグ&ドロップなんて有り得ないし、修飾キーでスイッチキーが押せるのも仮に割り当てられているだけです。なので実キー使用時の一括送信も不要です。ただ単に、Shiftキーを押せばアルファベットの大文字と小文字が切り換えられるような感覚で動作をしてくれれば本望なんです(この動作イメージをマウス操作に置き換えたのが、ドラッグ&ドロップだったんです)。
もちろん、例えば“スイッチキーとパッドキーの同時押しで一時的な入力”、“スイッチキー単独でCaps Lockキーのようなトグル動作”をしてくれたら、なおさら便利でしょうけどね。でも、複雑な改良を要求しちゃって、キーボードのお値段が高くなってしまったら嫌なんで、そんな贅沢は言うまい(…妄想にも程がある)。

MSX第一号機となる三菱電機製“ML-8000”のオプションとして用意されていたテンキーには、なんと 0~9 の上に A~F のキーが存在したというではないか! その雄姿を見よ!! うゎ~眩しい。
マシン語を前提としていたためらしくピリオドがないのが玉に瑕だけど。

参考・引用文献/拝借物

毎度、有難う御座います。大変お世話になりました。

リファレンス/サンプル

アイコン作成ツール

[Top(T)][Index(X)][Back(B)]