IME ON/OFFの制御をShiftキーライクにする


概要

たとえば、

  • Markdownを記載中
  • 設定ファイルの記述中
  • vimで入力モードからノーマルモードへの移行

これらで日本語と英語の入力が混在するときに、
英語入力 → IME ON → 日本語入力 → IME OFF → 英語入力
とやるの、結構ストレスじゃありません?
たまに切り替えを忘れて、せっかく入力したのが無駄になったときは特に。

そこで、英語で[Shift]キー押してなら小文字入力から大文字入力になるみたいに、
何かのキーを押している間だけ日本語入力できて、放したら英語入力に戻れるようになったら、便利だなーと思って作ってみました

環境

OS : Windows 10 64bit
IME : Microsoft IME

作ってみた

キーリマッピングにはレジストリ変更型と常駐型の方法がありますが
押下状態を見るには監視しないといけないので常駐が組める AutoHotKey を使います

またeamat氏 作成のIME制御のスクリプトを拝借させていただきました(感謝!!)
https://w.atwiki.jp/eamat/pages/17.html

実装した部分はこんな感じです

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

#Include lib\IME.ahk
#InstallKeybdHook

; メイン
_Main:
    SetTimer,_ImeAutoSwitch,ON
return

_ImeAutoSwitch:
    ; キーの入力状態を取得する
    ; vk1C 変換キー
    ; キーリスト
    ; http://ahkwiki.net/KeyList
    ; 英数、ひらがな/カタカナ、全角/半角キーは動作不安定
    ; AutoHotkeyのバージョンが上がってvk~, sc~を分けて判定できるようになっている
    GetKeyState, KeyState, vk1C, P

    ; IME ON/OFFの状態を取得![capture_2020-12-19 214638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83304/3e1d093a-bc1b-2929-e74e-6477b4fb7152.png)

    ImeState := IME_GET()

    ; キーを離している場合
    If KeyState = U
    {
        ; IME ONだったらOFFにする
        If ImeState = 1
        {
            IME_SET(0)
        }
    }
    ; キーを押している場合
    Else If KeyState = D
    {
        ; IME OFFだったらONにする。ひらがなモードにしている。
        If ImeState = 0
        {
            IME_SET(1)
            IME_SetConvMode(0x09)
        }
    }
    ; ウェイト
    Sleep 200
return

使ってみたい?

下記の手順で行います

AutoHotKey をインストールする

AutoHotKeyの公式ページからダウンロードします

AutoHotKey
https://www.autohotkey.com/download/

この記事では version 1.1.33 で動作確認しています

IMEの変換キーの制御を変更する

Microsoft IME の標準設定だと
半角入力の後に[変換]キーを押した際に再変換が行われてしまうので無効にします

  1. タスクバーの[IME]アイコンを右クリック
  2. メニューから[プロパティ]を選択する。
  3. [Microsoft IMEの設定]画面で、[詳細設定]ボタンをクリック 4.[Microsoft IMEの詳細設定]画面が開く
  4. 「変換」キーの項目があれば2列目の"入力/変換済み文字なし"の機能選択を"-"に変更して[OK]を押す
    (最低限はこれだけですが、筆者は他の入力切替の箇所も"-"にしてます)

ファイル設置

ここから任意の場所に git clone するかダウンロードしてください

起動

ImeAutoSwitch.ahk をダブルクリックか、右クリックで[Run Script]

タスクバーのインジケーターに緑のHマークがつけばOKです

使い方は単純。テキスト入力する場面で、
全角入力、つまり日本語入力したいときはスペースキーの横の[変換]キーを親指で押しっぱなし
半角入力、英字入力したいしたいときは[変換]キーを放して入力します

停止

起動時についたインジケーターにある緑のHマークを右クリックして[Exit]を選択します

感想

この記事もこのスクリプトを実行しながら書いてますが、思った以上に便利(自画自賛)

IME切り替えが頻繁に必要な場面では便利だけど、長い文章を書き続けるときは押しっぱなしが結構大変かも。。
常駐ON/OFFできる機能を加えたいですね

もし使っていただけたらレビューもらえるとうれしいです