左右の ctrl キーを単体で押したときに IME のオン/オフを切り替えるようにする PowerShell スクリプトです。左 ctrl キーで IME をオフ、右 ctrl キーで IME をオンにします。
Windows 10 で動作確認済みです。
制作過程などはこちら: 左右 Command キーで日本語入力をオフ/オンするやつの Windows 版を作った
ctrl-ja.cs をダウンロードし PowerShell で以下のスクリプトを実行すると、ctrl キーで IME の切り替えができるようになります。
Add-Type -TypeDefinition (gc -Path ".\ctrl-ja.cs" -Raw) -ReferencedAssemblies System.Windows.Forms; [CtrlJa.Program]::Main();
停止するには ctrl+C を押します。停止後は ctrl キーの働きは元通りになります。
このプログラムを常用する場合は、このプログラムがコンピューターの起動時に自動的に立ち上がるようにしておくと便利です。以下の手順に従ってこのプログラムを Windows のタスクスケジューラに登録します。
cd .\ctrl-ja\
$trigger = New-ScheduledTaskTrigger -AtLogon -User $env:USERNAME
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument ('-NoLogo -WindowStyle Hidden -Command "& {Add-Type -TypeDefinition (gc ' + (Resolve-Path .\ctrl-ja.cs) + ' -Raw) -ReferencedAssemblies System.Windows.Forms; [CtrlJa.Program]::Main();}"') -Id "ctrl-ja"
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -ExecutionTimeLimit (New-TimeSpan -Days 90)
Register-ScheduledTask -TaskName "ctrl-ja" -Trigger $trigger -Action $action -Settings $settings -User $env:USERNAME
タスクスケジューラの GUI からもプログラムを登録することができます。
「ファイル名を指定して実行」に「taskschd.msc」と入力し、タスクスケジューラを開きます。
左側のパネルからタスク スケジューラ (ローカル) → タスク スケジューラ ライブラリを選択します。
メニューの「操作」→「タスクの作成」から、タスクの作成ウィンドウを開きます。以下に従って設定し、OK をクリックします。記載のない項目はデフォルト値のままとしてください。
- 全般タブ
- 名前:
(お好みの名前)
- 名前:
- トリガータブ
- 「新規」ボタンをクリック
- タスクの開始:
ログオン時
- タスクの開始:
- 「新規」ボタンをクリック
- 操作タブ
- 「新規」ボタンをクリック
- プログラム/スクリプト:
powershell.exe
- 引数の追加:
-NoLogo -WindowStyle Hidden -Command "& {Add-Type -TypeDefinition (gc ctrl-ja.cs へのパス -Raw) -ReferencedAssemblies System.Windows.Forms; [CtrlJa.Program]::Main();}"
- たとえば、
ctrl-ja.cs
を C:\ 直下に置いた場合は-NoLogo -WindowStyle Hidden -Command "& {Add-Type -TypeDefinition (gc C:\ctrl-ja.cs -Raw) -ReferencedAssemblies System.Windows.Forms; [CtrlJa.Program]::Main();}"
となります。
- たとえば、
- プログラム/スクリプト:
- 「新規」ボタンをクリック
- 設定タブ
- タスクを停止するまでの時間: チェックを外す
これで設定完了です。メニューの「操作」→「実行」を選択し、正しく実行されるか確かめてみてください。
このプログラムは mac アプリ「英かな」に触発されて作成しました。
PowerShell と C# でキー入力を監視する方法については次の記事を参考にしました。 Creating a Key Logger via a Global System Hook using PowerShell
また、Win32 API で IME を制御する方法については次の記事を参考にしました。 (AutoHotkey)(IMEの制御をする 編) - もらかなです。
以上のプログラムおよび記事の作者に感謝申し上げます。