blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

Windows 付属のスクリーンキーボード使用時は、Ctrl を押しても QWERTY 配列に切り替わらない

具体的な質問の内容は、細部を少々変更するが、つぎのようなものである。

  • DvorakJ で、直接入力用配列として Dvorak配列を、日本語入力用配列として ACT を使用している
  • Ctrl を押しているときは QWERTY 配列を使用するよう、DvorakJ を設定している
  • 通常のキーで、C-文字を押すと、Ctrl-QWERTY 配列のキーが発行される(たとえば、Dvorak配列の C-j で QWERTY 配列の C-c を発行する)
  • Ctrl を押しながらWindows付属のスクリーンキーボード経由で入力すると、QWERTY 配列に切り替わらずに、キーが発行されてしまう
  • なぜこのようなことが生じるのか?

まず、キー入力とDvorakJの処理の関係を整理しよう。通常のキー入力ならば、つぎのような処理を行う。

  1. キー入力
  2. DvorakJによる変換処理
  3. キーの発行

スクリーンキーボードを使用するときはこうである。従来のキー入力の部分が、マウス入力と仮想的なキー入力の二つによって担われている。

  1. マウス入力
  2. 仮想的なキー入力
  3. DvorakJによる変換処理
  4. キーの発行

DvorakJ が C-文字Ctrl-QWERTY 配列のキーを発行するとき、監視しているのは、Ctrl と何らかのキーが物理的に押し下げられているかどうかである。仮想的に入力されているキーについては、この監視処理の範囲外である。もちろん、監視する対象を物理的なキー入力だけではなく仮想的なキー入力に広げる方法もあるが、そうすると、DvorakJ が他のアプリケーションの処理を必要以上に妨害してしまう恐れがでてくる。こういう理由で、物理的に押し下げられているキーの処理のみを監視対象としているのだ。
こういう理由で、スクリーンキーボードによって生成される仮想的なキー入力は物理的にキーを押し下げるものではないから、そのようなときにCtrl を押していても、DvorakJ は QWERTY 配列に切り替えないのだ。
対処策として考えられるのは、スクリーンキーボードから入力するときに限り、DvorakJ の機能を無効にするということだ。DvorakJ 用のショートカットキーを用い、有効と無効を切り替えればよいだろう。
将来的には、スクリーンキーボード経由の入力時に QWERTY 配列へと自動的に切り替えることが可能になる。というのも、アプリケーションによってキーボード配列を自動的に切り替えられるようにするつもりだからだ。この機能が実装されるまでは、先述の DvorakJ 用ショートカットキーを使用してほしい。