外付けテンキーのキーコード調べ(主にAutoHotKey向け)

概要

自分用便利キーを作りたく、テンキーを買った。

単純に「キーボードの左側を取り外したもの」として使おうと思っていたが、いろいろ単純にいかなかったのでちょっとメモしておく。

NumLock非同期ができない問題

Amazonレビューにもあるように、初期でNumLock非同期の挙動が発生しないことがある。実際、最初の1日はこの挙動だった。テンキー側のNumLock操作だけでは入力が変化しなかった。KeyMillで見てみると、本来「NumLock→数字キー→NumLock」となるべき時に、NumLockが送信されていない。何がおかしいのかわからず初日は終わった。

しかし、2日目いじっていると、途中で直っていた。以降全く初日の動作は再現しなかった。

原因はよくわからない。「使っているうちに安定した」としか言えない。

言いたいのは「返品する前に丸1日あれこれ打ったら直るかもよ?」という事です。

外付けじゃないテンキーとの違い

以降はちゃんと製品説明通りにNumLock非同期が働くテンキーの説明をする。

キーボードのNumLockオフ時

結論:NumLockオフ状態にホットキーを割り当てようとすると、106キーボード側の個別EndやHomeキーを巻き込むことになる。

テンキー1(NumPad1/NumpadEnd)を例にとる。

キーボード テンキー
テンキーNumLockオフ NumpadEnd End
テンキーNumLockオン NumpadEnd NumPad1(前後NumLock挿入)

おわかりいただけただろうか。

キーボード側のNumLockはオフのままのため、出力はNumpadEndで変化しない。これはいつも通り。

外付けテンキーはNumLockオン時はテンキー1(実際はNumLock→Numpad1→NumLock)になる。これも、キーボードのNumLockオン状態と同じ。

一方、NumLockオフ時、テンキーはNumpadEndにならない。テンキーの左側にある、単独のEndキーと同じキーコードを出す。

試しにAHKで、

End::
    msgbox "test"
Return

というのを書いてテンキーを押すと、ちゃんとダイアログが出る。

ということで、NumLockオフ状態のテンキーは、キーボードのNumLockオフテンキーとはキーコードが異なる*1

(これで1日嵌まった)

強制NumLock無効化

結論:外付けテンキーのNumpadEndなどを出力させるには、力技が必要

外付けテンキーのNumLockオン時は「NumLock→数字→NumLock」となる。

これを無効化しようとして

NumLock::
Return

というスクリプトを書いた*2。キーを押して数字が出ないことを確認*3。この状態で確認したキーコードを表に追加すると以下のようになる。

キーボード テンキー テンキー(NumLock無効化)
NumLockオフ NumpadEnd End End
NumLockオン NumpadEnd NumPad1(前後NumLock挿入) NumpadEnd

NumLockをオフにした状態と同じ、ではなく、NumpadEndを出力する。

これはこれで使いようもあるが、AHKの仕様上、たまにNumLockを無効化しきれず、数字キーに切り替わってしまうことがある。手元では「本当にたまに」しか起きないが、アプリケーションより下層レイヤの現象なので、場合によっては頻繁に起きて、使い物にならないかもしれない。

結論

  • キーボードのテンキーと外付けテンキーはイコールではない
  • AHK割付を考えてる場合にはいろいろ工夫が必要

*1:推測になるが、ノートPCのFn同時押しのEndがNumpadEndでないEndなのと関係ある実装なのかもしれない。

*2:全く使えないのは困るのでPauseなどにNumLockを割り当てておく

*3:たまにすり抜ける(AHKの仕様)