Loading [MathJax]/extensions/tex2jax.js

windows10でcaps lockとctrlを入れ替える

2022/05/21

設定

 ショートカットキーとしてよく使うctrlキーですが、若干押しにくい位置にあります。。。
一方で押しやすい位置にcaps lockキーがありますが、大文字⇔小文字を切り替えるという日本語入力する際にはあまり使われない機能が割り当てられてます。

今回は押しやすい位置にあるが、あまり使わないcaps lockキーとよく使うが押しにくい位置にあるctrlキーを入れ替えたので備忘録として残しておきます。

環境はwindows 10です。

PowerToysをインストールする(上手くいかず。。。)

結論から言うと私の環境ではPower Toys によるキーボードの入れ替えはうまくいきませんでした。。。環境によってはうまくいく場合もあるみたいなので、私はうまくいかなかったですが備忘録として残しておきます。

今回はPowerToysというソフトをインストールしてキーボードのレイアウトを変えます。
Caps Lockをctrlに変更するソフトとしてはctrl2capなどもありますが、PowerToysはMicrosoftの公式ツールであるということと、他にもいろいろな機能が使えるので、今回はPowerToysの方にしました。

キーボードのレイアウト変更以外のPowerToysでできることについては下記サイトを参照お願いします。

PowerToysをインストールする

PowerToysはMicrosoftStoreからインストールすることができます。
Microsoft Storeの検索画面で「power toys」と検索すると以下のアプリがヒットするので、これをインストールします。


インストールが出来たらキーボードマネージャーを押下して設定を開くを押下します。


次に「キーの再マップ」を押下します。

物理キーをCaps Lockにしてマップ先をCtrl(Left)にします。
マップ先は複数のキーを選ぶことができるみたいで、例にも書いてある通り特定のキーを押すとctrl+Cを押したことにもできるみたいです。

今回は複数の割り当ては行いませんが、便利そうなので将来的には使っていきたいと思います。

ちなみに私の環境ではCaps Lockではうまく反応せず、VK240だと反応するようになりました。

これでキーの入れ替え自体は完了したのですが、Caps Lockキーを押すとずっとctrlキーが押しっぱなしになってしまうようになりました。。。

Twitterを調べてみると同様の事象が発生している人が何人かいるみたいです。。。




Twitterを見ていて分かったのですが、PowerToysでcapslockキーにctrlを割り当てるとボタンを離したというイベントを取得できないみたいで押しっぱなしになってしまうみたいです。

試しに割り当てをいじってないctrlキーを押してみる押しっぱなし状態がリセットされました。(通常のctrlキーを押すことでキーアップイベントを取得できるため)

また、capslockキーを二回押すとctrlキーを二回押したことになったため、ボタンを押したという情報のみ取得出来ているみたいです。

PowerToys自体は結構便利そうなので、今後改善されるといいなと思います。。。

結局cap2ctrlを使って入れ替える

公式ページからソフトをダウンロードします。


ダウンロードしたらzipファイルを解凍して適当な場所に移動します。
私の場合はCドライブ直下に移動しました。

次にコマンドプロンプトを起動して解凍したフォルダに移動したうえで以下のコマンドを実行します。(今回はCドライブ直下で実行しています。)

C:\Ctrl2Cap>ctrl2cap.exe /install

コマンド実行後に再起動すればインストールは完了です。
再起動後動作試してみましたが、こちらはきちんとキーアップのイベントを取得出来ていいですね。

cap2ctrlの注意点としてはcaps lockキーをctrlにするだけなのでcapslockが使えなくなります。(ctrlキーはそのままctrlとして動作します。)

(補足)PowerToysでうまくいかない理由


上記記事によるとキー入れ替えのユーティリティーは大きく分けてレジストリを使うタイプとHookというAPIを使うタイプの2つがあるそうです。

windowsではキーボードはデバイスドライバーが扱うため、アプリケーションから直接アクセスすることが出来ません。もしwindowsでキー入れ替えをする場合は下記2つのどちらかを実施する必要があります。
  1. キーボードドライバーのレベルのするもので、レジストリに入れ替えたいキーを定義する
  2. WindowsにあるHookというAPIを使い、キーボードから発生するイベントがアプリケーションに行く前に処理を実施する方法
caps2ctrlは1のレジストリをいじる系のソフトで、今回失敗したPowerToysは後者のHook
というAPIを使うタイプとなります。

Hookを使った場合ですが、Caps Lockキーはwindowsのスキャンコードレベルでは一緒なのですが、レイアウトDLLで変換された仮想キーボードレベルで入れ替えるため、JISキーボードの場合は英数字キーになるそうです。(VK_OEM_ATTN(0xF0、VK_240とも))

この仮想キコードはキーボードが日本語入力の時だけ出力されます。
ややこしいことにこのキーは押したイベントを通知するのに離したことは通知しないとのことです。

同じキーをShiftと同時に押すとVK_CAPITALコード(0x14)が出力されてこちらは離したときにイベントが発生します。
windowsで定義されている仮想キーボードの一覧は下記サイトを参照お願いします。

上記内容をもとにVK240:押したときのイベントとVK20(0x14):離したときのイベントを駆使してPowerToysで何とかできないか試行錯誤しましたが、私の実力では無理でした。。。

恐らくPowerToysは英字キーボード向けで作られていると思うので、JISキーボードでうまく動作するようになるにはまだ時間がかかるのではないかと思います。。。

まとめ

今回PowerToysをインストールしてcapslockとctrlを入れ替えようとしましたが、ctrlが押しっぱなしになるという事象が発生しました。。。

なので、cap2ctrlというソフトをインストールしてcapslockとctrlキーを入れ無事うまく動作するようになりました。




自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

QooQ