2022/05/02

220502 無変換キー2回押しで半角英数

Macの日本語キーボードの場合、誤ってIMEオンのまま入力しても英数キーを2回押しで半角英数に変換してIMEオフになる。
Windowsだと入力中にCtrl+Tで半角英数に変換できるが、改めてするIMEをオフにする必要があるので、Macと同じ感覚で無変換キーを2回押すことで半角英数変換とIMEオフできるようにした。

IMEの設定でスクリプトを書き直す必要があると思われるので、自分の設定は下記の通り。

Windows 10でIMEはGoogle日本語入力を使用。
タスクバーのIMEのアイコン上で右クリックし「プロパティ」を選択。
「一般」タブの「キー設定」にある「キー設定の選択」の「編集」クリック。
入力キーでソートし、「Muhenkan」の「入力文字なし」は「IMEを無効化」、それ以外は「半角英数に変換」を選択。
同様に「Henkan」は「変換中」のみ「次候補を選択」、それ以外は「IMEを有効化」を選択して、「OK」を押す。
プロパティも「OK」を押して、メモ帳か適当なソフトでIME切り替えを確認。

以下のスクリプトをAutoHotkeyに追加する。


~sc07B up::
If (A_PriorHotKey == A_ThisHotKey && A_TimeSincePriorHotkey < 500) ; 0.5秒以内に無変換キー(sc07B)を2回押し
{
    Send, +{Space} ; 無変換キーで1回変換しているため、Shift+Spaceで一つ前の候補に戻す
    Sleep, 50
    Gosub, imeoff
}
Return

; IME有効化(ここではimeonはなくても動く)
imeon:
{
    Sleep, 100
    Gosub, IMEGetstate
    If (vimestate = 1)
    {
    }
    else
    {
    Send, {vkf3}
    }
    return
}

; IME無効化
imeoff:
{
    Sleep, 100
    Gosub, IMEGetstate
    If (vimestate = 0)
    {
    }
    else
    {
    Send, {vkf3}
    }
    return
}

; IMEの状態を取得
IMEGetstate:
{
    DetectHiddenWindows, ON
    WinGet, vcurrentwindow, ID, A
    vgetdefault := DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint", vcurrentwindow)
    vimestate := DllCall("user32.dll\SendMessageA", "UInt", vgetdefault, "UInt", 0x0283, "Int", 0x0005, "Int", 0)
    DetectHiddenWindows, Off
    return
}

; IME制御の参考ページ
; https://qiita.com/neokix/items/83ac2ac8e1dd405528b0
; https://morakana.hatenadiary.org/entry/20080213/1202876561
x

0 件のコメント:

コメントを投稿