Open4
wincomposeでIMEのON/OFFを制御する
やりたいこと
Wincomposeで日本語を含む文字を入力する場合にIMEがONの場合、入力モードに依存してカタカナ/ひらがなが変わってしまうのを抑制したい。
詳細
[compose]+[t]+[k]+[g]→「:_天界グー:」というシーケンスの場合
IME-OFFの場合→問題なく入力される
IME-ON(入力モード:かな)の場合→「グー」がかな文字になり変換候補が表示される
IME-ON(入力モード:全角カナ)の場合→「グー」は正しく表示されるが変換候補が表示される
この問題の背景
youtubeのコメントでエモート(絵文字)を入力する場合「:example:」のような形で定義された文字を
入力することで、キーボードから直接入力することが可能である、これをWincomposeのシーケンスとして登録することで、素早くエモートを入力することが可能となる(また一部の複数キー登録可能なキーボードを利用することで1キーで入力も可能となる)
ただし、一部のyoutubeチャンネルにおいてこのエモートが日本語で定義されていることがあり、これによりそのチャンネルにおいては次のような手順で操作する必要があり、「素早いエモート入力」という目的に支障をきたしている。
- エモート入力前にIMEがOFFであることを確認する
- エモートのシーケンスを入力する
- エモート入力前にIMEがONだった場合ONに戻す
問題へのアプローチ案
- マクロキーボード側でIMEをOn/Offする
- WincomposeのシーケンスでIMEを制御する(全角/半角キーを押す)
- Wincomposeを改良する
1と2は無理そう(両者ともInternationalやLangキーに関する操作ができない)
3に必要なAPIを洗い出す。
IMEの状態を把握するために必要なAPI
- GetForegroundWindow
https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-getforegroundwindow - GetGUIThreadInfo
https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-getguithreadinfo - ImmGetDefaultIMEWnd
https://learn.microsoft.com/ja-jp/windows/win32/api/imm/nf-imm-immgetdefaultimewnd - WM_IME_CONTROL メッセージ
https://learn.microsoft.com/ja-jp/windows/win32/intl/wm-ime-control
※参考
atrandom/wincomposeにて修正開始
- 対応済み
- iniによる設定でIMEの状態把握及びON/OFFの制御
- 未対応
- gui設定
- 一部のアプリ内ではIMEの切り替えとキーの送信が入れ子になるケースの調査