PowerShellでコマンド実行したらIMEをオフにする

  1. 日本語打つためにIMEオンにする
  2. コマンド実行する
  3. 次にコマンド打とうとしたらIMEオンでムキーってなる

ということがあるよね、わかるよ

なのでprompt()でIME状態を検知して、オンになってたらオフにしたかった
最初はGetKeyStateで0xF4キーのトグル状態がオンだったら0xF3を押すような感じにしていたんだけど、IMEの状態がプロセスごとなのに対して前述のキー状態は全体で共有だから、齟齬が出ちゃうと途端に変な動きに
困りますね
困ってました

今日改めてぐぐってみた
すると、WM_IME_CONTROLSendMessageしてやると状態の取得も切り替えもできるということがわかったのだ

  1. (ps -Id $PID).MainWindowHandle で自分のウィンドウハンドルを取る
  2. 取れてなかったら取れるまで親PIDを遡る(※)
  3. ImmGetDefaultIMEWndでIMEのウィンドウハンドルを得る
  4. SendMessageでやりたい放題

※ ふつうにPowerShell使う場合は問題ないんだけど、ConEmuだと必要

快適ですわ!
快適ですわ!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中