はじめに:US配列ユーザーの「あの」絶望
皆さんは、WindowsでUS配列キーボードを使用していますか?
私は使用しています。カッコいいですよね、US配列。
しかし、Windowsのキーボードレイアウト設定自体を「英語配列」に変更せず、日本語配列(JP)設定のまま、フリーソフトでUS配列入力をエミュレートするという運用をしている方も多いのではないでしょうか。
代表的なツールとしては以下のようなものがあります。
- ULE4JIS
- USkey2JP
これらは非常に便利ですが、Visual Studio や PowerShell などを 「管理者権限」 で実行した途端、急にJP配列に戻ってしまい、記号入力で絶望した経験はありませんか?
-
@を打とうとして[が入力される -
_(アンダースコア) が打てない - コードがまともに書けなくなる
今回は、この現象の回避策を共有します。
原因:UIPI (User Interface Privilege Isolation)
なぜ、特定のウィンドウ(管理者権限で動いているアプリ)だけ、キー変換ソフトが効かなくなるのでしょうか。
これはWindowsのセキュリティ機能である UIPI (User Interface Privilege Isolation) が関係しています。
簡単に言うと、「権限の低いプロセス(通常起動したULE4JISなど)は、権限の高いプロセス(管理者起動したVSなど)に対して、メッセージ(キー入力のフックなど)を送ることはできない」 という仕組みです。
セキュリティ上、低い権限のマルウェアが高い権限のアプリを操作できないようにするための機能ですが、今回のようなキーマッピングツールにとっては壁となってしまいます。
解決策:キー変換ソフトも「管理者権限」で動かす
解決策はシンプルです。ULE4JISなどのツール側も管理者権限(特権)で実行してしまえば、対等な関係となりキーフックが機能します。
方法1:毎回「管理者として実行」する(非推奨)
ツールのショートカットを右クリックして「管理者として実行」を選択すれば解決しますが、毎回UAC(ユーザーアカウント制御)のダイアログが出て画面が暗転するのはスマートではありませんし、スタートアップに登録して自動起動させるのも難しくなります。
方法2:タスクスケジューラを使って自動起動させる(推奨)
これがベストプラクティスです。
Windowsの「タスクスケジューラ」を使えば、ログイン時に「最上位の特権」で、かつUACダイアログを出さずにバックグラウンドで起動 させることができます。
手順
-
タスクスケジューラの起動
- Windowsキーを押して「タスク」と入力し、「タスクスケジューラ」を起動します。
-
タスクの作成
- 右側の操作パネルから「タスクの作成」をクリックします(※「基本タスクの作成」ではないので注意)。
-
【全般】タブの設定
-
名前: わかりやすい名前(例:
ULE4JIS_Admin) -
セキュリティ オプション:
- 「最上位の特権で実行する」にチェックを入れる ← ここが最重要!
-
名前: わかりやすい名前(例:
-
【トリガー】タブの設定
- 「新規」ボタンをクリック。
- タスクの開始: 「ログオン時」を選択。
- OKをクリック。
-
【操作】タブの設定
- 「新規」ボタンをクリック。
- 操作: 「プログラムの開始」
- プログラム/スクリプト: 使用しているツール(ULE4JIS.exeなど)のパスを参照して指定。
- OKをクリック。
-
【条件】タブの設定(ノートPCユーザー注意)
- 「コンピューターをAC電源で使用している場合のみタスクを開始する」のチェックを外す。
- これを外さないと、バッテリー駆動時にツールが起動しません。
-
完了
- OKを押してタスクを保存します。
これで設定は完了です。一度サインアウトしてログインし直すか、作成したタスクを右クリックして「実行」してみましょう。
ツールのショートカットを右クリックして「管理者として実行」を選択すれば解決しますが、毎回UAC(ユーザーアカウント制御)のダイアログが出て画面が暗転するのはスマートではありませんし、スタートアップに登録して自動起動させるのも難しくなります。
これで設定は完了です。一度サインアウトしてログインし直すか、作成したタスクを右クリックして「実行」してみましょう。
確認
管理者権限でVisual Studioやコマンドプロンプトを立ち上げてみてください。
今まで通り、快適にUS配列入力ができるようになっているはずです。
まとめ
- 管理者権限のアプリでキー変換が効かないのはWindowsの仕様(UIPI)。
- 対抗するにはツール側も管理者権限で動かす必要がある。
- タスクスケジューラを使えば「最上位の特権」でサイレントに自動起動できる。
地味なストレスから解放されて、快適な開発ライフを!