🐙

第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リポジトリ
https://github.com/chiquwa/2touch-ime

🔗 Zenn記事一覧
https://zenn.dev/chiquwagohan

🔗 Note記事一覧
https://note.com/search?context=note&q=from%3A%40chiquwa&size=10

EXEファイルの購入
https://note.com/chiquwa/n/n59973d490326

https://www.youtube.com/watch?v=7_C7cDYGKiA

Discussion