「shift + 無変換キー + 文字キー」や「shift + 変換キー + 文字キー」で文字を出力する

目次

  • はじめに
  • 「shift + 無変換キー + 文字キーや「shift + 変換キー + 文字キー」で文字を出力する
  • DvorakJ と別のアプリケーションを連動させる
  • 使い方

はじめに

 表題のとおりの挙動を DvorakJ を使って実現できないかという問い合わせを受けた。そのキーのコンビネーションによってキリル文字を出力するようだ。残念ながら DvorakJ 単独ではそれを実現しえない、というのが結論である。
 しかし AutoHotkey_L を使えば実現できるのだ。なるほど AutoHotkey_L を使うということは、DvorakJ.exe の 元となっている DvorakJ.ahk に適宜追記をすればよいということである。ただし DvorakJ.ahk を改変する作業といっても、AutoHotkey_L の編集に不慣れな方にとって酷なものとなりうるだろう。そうなると、一般的な DvorakJ の利用者に対しては、DvorakJ.ahk を改変するよりも別のアプリケーションを併せて利用することをすすめたい。
 そこでこのエントリーでは、表題のとおりの挙動を実現するアプリケーションを作成する。まず「shift + 無変換キー + 文字キー」や「shift + 変換キー + 文字キー」で文字を出力するアプリケーションを AutoHotkey_L スクリプトとして作成し、それから DvorakJ と別のアプリケーションを連動させるアプリケーションを、やはり AutoHotkey_L スクリプトとして作成しよう。最後に、作成したアプリケーションの使い方を記す。

「shift + 無変換キー + 文字キー」や「shift + 変換キー + 文字キー」で文字を出力する

 まずはホットキーの指定方法から考えてみよう。
 AutoHotkey_L の「コンビネーションキー」の機能を使うと、「2つの任意のキー(ジョイスティック以外)の組み合わせをホットキーに指定することが可能」となる*1ので、無変換キー + 文字キーに文字出力の機能を割り当てることができるが、「shift + 無変換キー + 文字キー」といった3つの任意のキーの組み合わせをホットキーに指定することはできない。
 実は、コンビネーションキーの機能と併せて#If - AutoHotkeyJpGetKeyState() - AutoHotkeyJpを活用すれば、「shift + 無変換キー + 文字キー」といった3つの任意のキーの組み合わせをホットキーに指定できる。一例を示そう。

#if GetKeyState("shift", "P")
sc07B & a::
MsgBox,Й
return

 これで、3つの任意のキーの組み合わせをホットキーとして指定できる。


 次は出力する文字の設定について検討する。ここでは指定したiniファイルから、出力する文字情報の設定を読みこむようにしよう。書式として採用するのは、"s=Ё" のように、=の左側にはqwertyキー上のキー名を記し、=の右側には出力する文字情報を記すというものだ。
 AutoHotkey_L には、 ini ファイルからデータを読み出す IniRead - AutoHotkeyJp コマンドがあるものの、このコマンドを使うと、utf-8形式の ini ファイルからデータを読み込むときに、ascii文字以外のものが文字化けしてしまう。
 そのため、 utf-8形式の ini ファイルからデータを読み込んで解析するには、自分で処理を実装しなければならない。
 それから、ホットキーの情報と出力する文字情報を結びつけたうえで、当該文字を出力するよう設定すればよい。
 ここまでの処理を AutoHotkey_L のスクリプトと ini ファイルで表現すると以下のようになる。ただし、shiftキーを含む3キーのコンビネーションと、shiftキーを含まない2キーのコンビネーションの挙動を対照できるように、両方の処理を盛り込んでみた。

DvorakJ と別のアプリケーションを連動させる

 上記の AutoHotkey_L スクリプトを cyrillic-alphabet.ahk と名付け、これを exe 化したファイルを cyrillic-alphabet.exe と呼ぶことにする。また、ここで作成する AutoHotkey_L スクリプトを run-dvorakj-and-another-application.ahk と名付け、exe 化したものを run-dvorakj-and-another-application.exe と呼ぶ。
 cyrillic-alphabet.exeを単独で起動すれば、意図したとおりの挙動を示す。
 ところで、DvorakJ と cyrillic-alphabet.exe を連動させることは出来ないだろうか。具体例を示そう。それは、DvorakJ が起動しているときに限って cyrillic-alphabet.exe を起動したり、 cyrillic-alphabet.exe を起動しようとするときには併せて DvorakJ を起動する、さらには DvorakJ を終了させることで cyrillic-alphabet.exe を自動的に終了させる、といったものである。
 ここではDvorakJ と cyrillic-alphabet.exe を連動させる AutoHotkey_L スクリプトを作成する。
 必要な処理は、DvorakJ が起動しているかどうかを監視すること、DvorakJ.exe か DvorakJ.ahk のパスを認識させること、cyrillic-alphabet.exe のパスを認識させること、cyrillic-alphabet.exe を起動することと終了すること、だろう。
 各パスの設定と DvorakJ の存在の監視間隔の設定に関しては ini ファイルで行うこととしよう。
 これらをすべて盛り込んだのが、以下の AutoHotkey_L スクリプトと ini ファイルである。

使い方

 以下のリンク先からzipファイルをそれぞれ入手する。zipファイルの中に含まれているのは、.exe と .ahk と.iniのファイルである。

 zipファイルを展開したら、それぞれの.exeと.iniのファイル計4つを DvorakJ.exe と同じフォルダに移す。
 まずcyrillic-alphabet.iniを編集し、どのキーに何の文字を割り当てるのかを設定する。
 そしてrun-dvorakj-and-another-application.exeを実行する。これで、DvorakJ.exe と cyrillic-alphabet.exe が連動する。
 cyrillic-alphabet.exe を終了するには、DvorakJ.exe を終了するだけでよい。また cyrillic-alphabet.exe のみを終了するには、タスクバーの AutoHotkey アイコンを右クリックしてExitを選択する。
 ホットキーをさらに拡張するには、cyrillic-alphabet.ahkとcyrillic-alphabet.iniを編集すること。その後cyrillic-alphabet.ahkをexe化する必要がある。ただ、.ahkを.exeにするにはAutoHotkey_L をインストールしなければならない。