🐙
第6回:誤変換時の対応とNumLock制御 AutoHotKeyV2
🧩 はじめに
2タッチ入力方式では、誤入力や変換ミスが発生することがあります。また、テンキーを使う都合上、NumLockの状態や他のキーとの共存も考慮する必要があります。本記事では、そうした「入力の安定性と柔軟性」を高めるための設計と実装について解説します。
🧠 主な課題と対応方針
誤変換の原因
- 1タッチ目の後に無効な2タッチ目を押す
- 特殊キーとの組み合わせが不正
- NumLockの状態によってキーコードが変化
対応方針
- 状態リセットの導入
- NumLockに依存しないキー処理
- 通常キーとの共存設計
🔧 実装:状態リセット処理
グローバル変数の初期化
ResetKey() {
global
lastPressedKeyCode := ""
lastOutputRomaji := ""
lastActionWasConversion := false
}
リセット用ホットキー
NumpadAdd::ResetKey()
ユーザーが + キー(NumpadAdd)を押すことで、入力状態を明示的にリセットできます。
🔄 無効な入力の検出とリセット
try {
currentNum := Integer(currentNum)
if (ROW_KEYS.Has(currentNum)) {
lastPressedKeyCode := String(currentNum)
} else {
lastPressedKeyCode := ""
}
} catch {
lastPressedKeyCode := ""
}
• 数値変換に失敗した場合や、定義されていないキーが押された場合は状態をリセットします。
• これにより、誤入力による暴走を防止します。
🔢 NumLockの影響を排除する工夫
AutoHotkeyでは、NumLockの状態によってテンキーのキーコードが変わることがあります。本システムでは、Numpad0〜Numpad9 を明示的に指定することで、NumLockの状態に依存しない入力処理を実現しています。
Numpad0::HandleKey("Numpad0")
Numpad1::HandleKey("Numpad1")
🧩 通常キーとの共存設計
テンキー以外のキー(例:Enter、Tab、矢印キーなど)と干渉しないように、以下のような設計を採用しています:
• テンキー以外のキーは処理対象外
• 特殊キー(記号・濁音など)は明示的に定義
• 通常のIMEと併用可能な構成
🖼 実行例
• 7 → 9 → 無効な組み合わせ → 自動リセット
• NumpadAdd → 状態リセット
• NumLock オン/オフ → 動作に影響なし
✅ まとめ
今回は、2タッチ入力方式における誤変換時の対応とNumLock制御、通常キーとの共存設計について解説しました。次回は、英語入力モードの設計と国際化対応について紹介します。
📥 SNS
🔗 GitHubリポジトリ
🔗 Zenn記事一覧
🔗 Note記事一覧
EXEファイルの購入
Discussion