外付けテンキーのキーコード調べ(主に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割付を考えてる場合にはいろいろ工夫が必要