IMEを再起動するバッチを作ってみた

会社から貸与されているPCのリース期限がきたため、新しいPCに更新していただきました!
前よりもスペックの高いPCになって、とても快適なのですが、以前のPCでは遭遇しなかった問題「IMEが時々フリーズ(?)する」にぶちあたり、調べたところIMEを再起動すれば良いと。

最初のうちはいちいちPowerShellを起動してコマンドを入力していましたが、思ったよりも頻繁にこの現象が発生するため、IMEを再起動するためのバッチを作ることにしました。

バッチの作り方

テキストエディタに以下のコマンドを入力し、「***.bat」という名前を付けて保存します。(保存するファイル名 * の部分は任意の文字列に変更してください)

@ECHO OFF
for /F "usebackq tokens=2" %%a in (
`tasklist /fi "IMAGENAME eq ctfmon.exe" ^| findstr "[0-9]"`) do (
taskkill /pid %%a
)
ctfmon.exe

バッチファイルについての詳細な説明は、以下のサイトなどたくさんの情報がWeb上にありますので、ご参照いただけたらと思います。

ここでは、ざっくり今回使用したコマンドの意味を説明します。
今回バッチファイルのコマンドで行われるのは、以下の手順です。

① 稼働中のプロセスから「ctfmon.exe」のプロセスIDを抜き出す
② 抜き出したプロセスIDに対し終了のシグナルを送る
③ ctfmon.exeを起動

稼働中のプロセスを調べるためには tasklist というコマンドを使いますが、特定のプロセス(ctfmon.exe)だけを知りたいので、 /fi "imagename eq ctfmon.exe" で抜き出します。

イメージ名                     PID セッション名     セッション# メモリ使用量
========================= ======== ================ =========== ============
ctfmon.exe                   39900 Console                    1    134,672 K

tasklist /fi "IMAGENAME eq ctfmon.exe" だけの場合、結果はこのようなリストで返ってくるのですが、 | findstr "[0-9]" で数字のみ抽出し、 "usebackq tokens=2" %%a で2列目の値のみ取得します。

taskkill /pid %%a で抜き出したプロセスIDに終了のシグナル送出、最後にctfmon.exeを起動して完了です。

バッチを管理者権限で実行する

保存したバッチファイルをダブルクリックすると、ctfmon.exeが再起動されるはず…と思いきや、プロセスの終了、起動は管理者権限でしか実行できない様子。
調べてみたところ、このようなやり方を見つけました。

バッチファイルのショートカットを作り、ショートカットのプロパティで管理者権限での実行を指定します。
これで、バッチファイルのショートカットをダブルクリックしただけで、IMEを再起動できるようになりました。

おわりに

普段開発をゴリゴリやってはいないので、たまにこんなことをするとわからないことも多くて大変ではありますが、Web 上にはたくさんのノウハウがあり、同じような困りごとを解決した事例などもあったりします。

プログラミングを少しだけでも知っていたら、それを自分のためにカスタマイズして便利に使うこともできますし、プログラマーとして仕事をしていなくても役に立つことが多いですよ!
ちょっとした機会にチャレンジしてみることをお勧めします(^_^)

この記事が気に入ったらサポートをしてみませんか?