VOLTECHNO(ボルテクノ)

ガジェットとモノづくりのニッチな情報を伝えるメディア

左手デバイスTourBoxのダイヤル操作でテキスト入力の数値を増減させるプロファイルを作る

左手デバイスTourBoxのダイヤル操作でテキスト入力の数値を増減させるプロファイルを作る

左手デバイスでテキストボックスやファイルリネームの数値入力をしたい

筆者はPC操作に左手デバイス TourBoxを使用している長年のユーザーで、Adobe製品や文書入力、3D CADの操作まで幅広い用途で使用しています。

テキスト入力用途では、TourBoxのキーにコピーやペースト、WordPressのショートカットなどのキーコンフィグを割り当てて使用しているのですが、左手のTourBoxを使いながらキーボードの文字入力がある時の持ち替えが煩わしく思うことも多く、数字のちょっとした入力だけでもTourBoxの操作で何とかならないかなと作業の効率化を考えていました。

そんなわけで、実際にたどり着いたのが、下の動画のようなテキストボックス内のフォーカスした数字をTourBoxのダイヤル操作で1単位で加算・減算するTourBoxのプロファイルです。

今回の記事では、TourBox ConsoleとAutoHotkeyを使った数字入力操作の実現方法について解説していきます。

TourBox Console + AutoHotkey + Fスクリーンキーボードで実装

今回のダイヤル操作の機能を構成するにあたっては、Windowsで動作するソフトウェア AutoHotkeyを使用します。

AutoHotkeyとは、キーボードのホットキー機能やマクロ処理、WindowsAPIを使った操作自動化を実現できる独自のスクリプト言語で動作するユーティリティソフトウェアです。

今回のTourBoxとAutoHotkeyを使った数字入力操作を実現する大まかな流れとしては下のような手順になります。

  1. AutoHotkeyで「フォーカスしたテキストをコピーして数値を1加算(減算)してペースト」をF13とF14で発火するスクリプトを作る
  2. TourBox Consoleを開き、FスクリーンキーボードでダイヤルキーにF13とF14を割り当てる
  3. テキストの数字をフォーカスしてTourBoxのダイヤルを回すと数値が1加算(減算)する

【STEP 1】 AutoHotKeyを導入する

AutoHotKeyは公式サイト(https://www.autohotkey.com/)からダウンロードできます。

AutoHotkeyのバージョンにはV2.0とV1.1がありますが、Download 2.0を選びます。

ダウンロードしたら、インストーラを起動してインストールを行います。

AutoHotKeyのインストールが完了すると、AutoHotkeyのスプリクトファイルである.ark拡張子のファイルが実行できるようになります。

【STEP 2】 .arkファイルを作って起動する

今回の動作を行わせるスクリプトは下記のコードになります。これを適当なエディタに張り付けて、任意の名前で.arkファイルとして保存して実行します。

#Requires AutoHotkey v2.0
#SingleInstance Force
#Warn

; ====== キー割り当て ======
INC_HOTKEY := "F13"   ; インクリメント
DEC_HOTKEY := "F14"   ; デクリメント

USE_SENDTEXT := true

; 置換後に、数値部分を再選択して選択解除を防ぐ
RESELECT_AFTER := true

; 増減する数値
STEP := 1
; ==================

Hotkey(INC_HOTKEY, (*) => AdjustSelectedNumber(+1))
Hotkey(DEC_HOTKEY, (*) => AdjustSelectedNumber(-1))

AdjustSelectedNumber(dir) {
    global USE_SENDTEXT, RESELECT_AFTER, STEP

    if !TryGetSelection(&sel) {
        SoundBeep(1100, 60)
        return
    }

    if !ParseSelection(sel, &leadWS, &numStr, &trailText) {
        SoundBeep(900, 80)
        return
    }

    numVal := Number(numStr)
    newVal := numVal + (dir * STEP)

    newStr := FormatLike(numStr, newVal)

    replacement := leadWS . newStr . trailText

    ; 置換(タイプ or 貼り付け)
    if USE_SENDTEXT {
        SendText(replacement)
    } else {
        PasteReplace(replacement)
    }

    ; 置換直後、数値部分を再選択(次の回転でも再選択不要に)
    if RESELECT_AFTER {
        ; UI反映待ち(アプリによって必要)
        Sleep(10)
        ReselectNumber(StrLen(newStr), StrLen(trailText))
    }
}

; --- 選択取得(クリップボードは元に戻す) ---
TryGetSelection(&sel) {
    clipSaved := ClipboardAll()
    try {
        A_Clipboard := ""
        Send("^c")
        if !ClipWait(0.25) {
            sel := ""
            return false
        }
        sel := A_Clipboard
        return (sel != "")
    } finally {
        A_Clipboard := clipSaved
    }
}

; --- 選択文字列を「先頭空白」「数値」「残り」に分割 ---
ParseSelection(sel, &leadWS, &numStr, &trailText) {
    re := "s)^(?<lead>\s*)(?<num>[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?)(?<tail>.*)$"
    m := RegExMatch(sel, re, &o)
    if !m
        return false

    leadWS := o["lead"]
    numStr := o["num"]
    trailText := o["tail"]
    return true
}

; --- 置換後:末尾から単位分戻って、数値だけを再選択 ---
ReselectNumber(numLen, tailLen) {
    ; キャレットは置換後に末尾へ行く前提
    if (tailLen > 0)
        Send("{Left " tailLen "}") ; 単位/空白ぶんだけ戻る

    if (numLen > 0)
        Send("{Shift down}{Left " numLen "}{Shift up}") ; 数値部分を再選択
}

; --- 元の見た目に寄せるフォーマット ---
FormatLike(orig, value) {
    ; 通常表記の場合、小数桁数は元の数値に合わせる
    origDec := 0
    if InStr(orig, ".")
        origDec := StrLen(StrSplit(orig, ".")[2])

    ; 先頭ゼロの維持
    ; 例:007 → 008
    isPureInt := !InStr(orig, ".")
    hasLeadingZeros := RegExMatch(orig, "^[+]?\s*0+\d+$")
    width := 0

    if isPureInt && hasLeadingZeros {
        tmp := RegExReplace(orig, "^\s*\+?", "")
        width := StrLen(tmp)
    }

    if origDec <= 0 {
        n := Round(value)
        s := n ""

        if width > 0 && n >= 0 {
            if StrLen(s) < width
                s := SubStr("00000000000000000000", 1, width - StrLen(s)) . s
        }

        return s
    } else {
        return Format("{:." origDec "f}", value)
    }
}

; --- 貼り付け方式の置換 ---
PasteReplace(text) {
    clipSaved := ClipboardAll()
    try {
        A_Clipboard := text
        ClipWait(0.2)
        Send("^v")
    } finally {
        A_Clipboard := clipSaved
    }
}

実行すると、タスクバーのアイコンにAutoHotkeyのアイコンが表示されて実行中のahkファイルの名前が表示されます。

【STEP 3】 Fスクリーンキーボードを起動して日本語フルキーボードにする

今回のスプリクトでは、数値の加算にF13キー、減算にF14キーを割り当てています。

F13とF14のキー入力をTourBox Consoleでダイヤルに登録すればスプリクトが動作するのですが、一般的なキーボードはF12までしかファンクションキーを備えていないので、F13/F14を入力できるソフトウェアを使用します。

F13/F14キーの入力には、Fスクリーンキーボード(https://sumishiro.blogspot.com/2025/02/f-ver31c.html)を使用します。

ダウンロードしたファイルを解凍してfkey.exeを実行すると画面上にソフトウェアキーボードが表示されます。

標準設定ではF12以降のファンクションキーが表示されていないので、左上のアイコンを右クリックしてコンフィグを開き、表示されるキーボードレイアウトを変更します。

タブの「右クリックメニュー」を開き、右クリックフリックを「レイアウト1」、キーボードレイアウトを「日本語フルキーボード」にして「OK」ボタンを押します。

Fスクリーンキーボードの任意の場所を右クリックすると操作パネルが表示されるので、レイアウト1を選びます。

キーボード表示がフルキーボードになり、F13以降のファンクションキーが表示されました。

FスクリーンキーボードはTourBox Consoleのキー登録時だけ使用するので、キー登録が完了したらFスクリーンキーボードは終了してもOKです。

【STEP 4】 TourBox ConsoleでダイヤルにF13とF14を割り当てる

TourBox Consoleを開いて、ノブを選択して「ショートカット/マウス」を選び、FスクリーンキーボードのF13とF14を登録します。環境によってはCTRL+F13として入力されてしまう場合がありますが、何度かFスクリーンキーボードを押すとF13単体が入力されます。

画面のようにプリセットにキー登録できたら準備完了です。

任意のテキストボックスに入力された数字をドラッグでフォーカスし、TourBoxのダイヤルを回すと、回した分だけ数値が加算(減算)される動作になっていると思います。

今回のスクリプトは、テキストボックスのフォーカスした数値全てに対応するので、例えばFusionの寸法もキーボードを使わずダイヤル操作で数値入力でき、マイナスの入力にも対応できるので逆方向の押し出しにも対応できます。

あとは、当サイト VOLTECHNOにアップロードしている画像ファイルは連番で管理しており、普段はリネームソフトで一括変更しているのですが、単発でリネームを行う時にはフォルダ名からコピーした後にTourBoxのダイヤル操作で連番数を変更しています。桁数を保持するようにしているので、0を足す余計な修正が発生しないようにもしています。

意外と前例はないらしい汎用テキストボックスの数字操作

今回のダイヤル操作で数字を操作できる入力デバイスを探してみたのですが、意外と存在していないようです。

Adobe系ソフトウェアやFigmaなどのクリエイティブ寄りのソフトウェアに関しては、ダイヤルを備える左手デバイス全般でソフト内のパラメータ調整としてのダイヤル操作は行えるようになっているのですが、任意のテキストボックスの数字に対して操作できるようなデバイスはあまり例がないようです。

TourBoxの数字操作にはAutoHotkeyを使用しており、AutoHotkeyはWindows用のマクロ言語としてはかなり強力なソフトウェアで、動作自体の軽さも含めてTourBoxと組み合わせることで、強力な作業効率化・自動化を実現できる環境を構築できるのが特徴です。

使用しているAutoHotkeyのスクリプトは、筆者が昔書いたコードをベースにAI生成したものなのですが、機能追加を指示したマイナスへの対応や桁数維持なども、ものの数分で追加できたので、AutoHotkey公式のチュートリアルやライブラリを見ながらコードを書いていた時代とは様変わりしてしまったことを実感しています。

AutoHotkeyのコーディングなどPC操作の自動化は楽しいものなのですが、今回のような複雑な操作を行わせようとすると、ライブラリやWindowsAPIとのにらめっこになり時間だけが取られてしまうため、AIでとりあえず機能実装を行い、余裕のある時にリファクタリングをするのも一つの手かと思います。

今回のスクリプトの処理としては、コピーペーストを繰り返しているため、入力レスポンスなどは実行しているPCスペックの影響を受けてしまうことも多く、予測変換やブラウザのアドレスバーで履歴や検索候補が出てしまうようなテキストボックスとの相性も良くないのが注意点となります。

とは言え、ファイルの連番リネームやCADの寸法入力、CSSのパラメータやWebフォームの数値入力など、適用できる範囲は広く、入力された数字を変えるだけの作業であればキーボードに触れることなく数字を操作できるのはかなり強力な機能で作業時の心理的な負担も抑えられるのも大きなメリットです。そういう意味でTourBoxはクリエイティブデバイスの一面だけではなく、事務処理にも使えるデバイスとしても使えるデバイスだと思っています。

ちなみに、このスクリプトはキー入力に対応する左手デバイスであればTourBoxに限らず適用でき、普及帯モデルの無印/NEO/Liteでも同じことはできますが、ダイヤルを回し過ぎて数字が増えすぎてしまう時も多いので、触覚フィードバックでクリック感を得られるTourBox Elite/Elite Plusがおすすめです。

本記事で使用しているアイテム

Return Top