Bluetoothテンキーに任意のキーを割り当てる

先日、こんなものを買ったんです。

Bluetooth接続の外付けテンキー。充電式で、薄型軽量で使いやすいという以外は何の変哲もないただのテンキー。

これをいわゆる「左手デバイス」として使いたいというのが今回のお話。

割り当てるにあたっての条件は以下。

  1. 本体のキーボードはそのままに、外付けテンキーにだけ割り当てをしたい。つまり、本体キーボードの「1」を押したときと、外付けテンキーの「1」を押したときで区別したい。
  2. 無料で使える。
  3. Windows10で使える。

1の条件を満たす奴が意外と少ない。いろいろ探した結果「LuaMacros」というものを使うことにした。

LuaMacrosのダウンロードとインストール

以下から「luamacros.zip」をダウンロードし、任意の場所に展開する。

Announcments – hidmacros.eu

初期設定

LuaMacros.exe を実行する。

まずはテンキーを接続していない状態で

lmc_print_devices()

と入力し実行ボタン(緑の三角ボタン)を押す。するとウインドウ下部に使用可能なデバイスの一覧が表示されるのでメモっておく。

次に、テンキーを接続してから同様のコマンドを実行し、表示されたデバイスの一覧をメモっておく。

「接続前の一覧には無くて接続後の一覧にあるやつ」が対象のキーボードなので、その1行をメモっておく。

例えば、こんな感じの行だったとする。

<unassigned> : \\?\HID#VID_XXXX&PID_XXXX&MI_00#X&1234ABCD&0&0000#{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} [XXXXXX] : keyboard

最初の項目は論理名が出力される場所で、この例では<unassigned>=論理名がまだ割り当てられていないことを意味する。2番目の項目はシステムID。最後の項目はデバイスのタイプで、今回はキーボードであることがわかる。

この中で必要な部分は、「&」に挟まれた以下の赤文字部分。

\\?\HID#VID_XXXX&PID_XXXX&MI_00#X&1234ABCD&0&0000#{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}

キー割り当て

ここまでメモったら一旦LuaMacrosのコマンドを全部消去し、以下を入力して実行ボタン(緑の三角ボタン)を押す。ウインドウ下部に何も出なければ成功。何か出たらエラーで失敗している。

lmc_device_set_name("extnumpad", "1234ABCD")

lmc_set_handler("extnumpad", function(button, direction)
    if (direction == 1) then return end
    if (button == 103)  then
        lmc_send_keys("^z")
    elseif (button == 104) then
        lmc_send_keys("^y")
    elseif (button == 9) then
        lmc_send_keys("#+(s)")
    end
end)

(Bluetoothテンキーの「7」を「Ctrl+Z」、「8」を「Ctrl+Y」、「TAB」を「Win+Shift+S」に割り当てる、という内容)

lmc_device_set_nameで対象のキーボードに論理名を割り当てる。そしてlmc_set_handlerでそのキーボードに対して「どのキーが押されたときに何をするか」の動作を設定する。

キーを押しっぱなしの時の処理を書きたい場合は、if (direction == 1) then のif文の中に対象の処理を書く。今回は押しっぱなしの時は連続実行させないのでここのif文には何も書かない。

実際の割り当てている部分の書き方はこんな感じ。

if (button == 対象のキーコード)  then
    lmc_send_keys("割り当てたい動作")
elseif (button == 対象のキーコード) then
    lmc_send_keys("割り当てたい動作")
end

lmc_send_keysの第二引数にはウェイトするミリ秒を入れられる。たとえばlmc_send_keys("a", 50)とすると50msのpauseが入る。

割り当て動作の部分には SendKeys メソッド | Microsoft Docs にある内容が使える。またWindowsキーはCtrlの「^」、Altの「%」、Shiftの「+」などと同様の使い方となる「#」で表す。 たとえばlmc_send_keys("#+(s)")は「Windowsキー+Shiftキー+s」、つまり「切り取り&スケッチ」になる。

ちなみにキーの割り当てはこのソフトが起動している間のみ有効で、閉じると無効になる。

参考:
Device names – hidmacros.eu
Syntax for Funtion keys and key combos? – hidmacros.eu

ファイルの保存と自動実行

フロッピーディスクっぽいボタンを押して保存すると、「*.lua」という拡張子で保存される。ここでは例として「C:\hoge\unko.lua」として保存したとする。それにしても人はいつまで保存ボタンにフロッピーのアイコンを使うんだろう。

次からはこの保存したluaファイルを読み込んで実行すればいい。

最初から特定のluaファイルを読み込んだ状態で起動させるには、まず適当なところに LuaMacros.exe のショートカットを作成し、右クリックで「プロパティ」を選択。「リンク先(T)」のところに LuaMacros.exe のフルパスが記載されていると思うので、以下のように変更して保存する。

(修正前の例)
C:\hoge\LuaMacros.exe

(修正後の例)
C:\hoge\LuaMacros.exe -r C:\hoge\unko.lua

以後は、まずBluetoothテンキーを接続した後にこのショートカットを起動すれば、即キー割り当てが有効になる。

おまけ

IC-KP08のキーコード一覧。赤文字はNumLockのON/OFFで切り替わるキー。