Zenn
Open13

windowsでのキーマップ設定

umeru9umeru9

キーマップ変更できるツールは調べたところ下記2種類

crevice4はマウスジェスチャーで利用しているのでできればCreviceで設定できるとうれしい

umeru9umeru9

AutoHotKey

  • キーマップには制限があるっぽい。自分のしたいWin+Lを→に変換するのに影響ありそう

Limitation: AutoHotkey's remapping feature described below is generally not as pure and effective as remapping directly via the Windows registry. For the advantages and disadvantages of each approach, see registry remapping.
https://www.autohotkey.com/docs/v1/misc/Remap.htm#intro

  • 変換のコードは簡単そう。下記でCapsLockをCtrlに変換できる。
CapsLock::Ctrl

複数入力の時の挙動はどうなる?

umeru9umeru9

Crevice4

// Convert Keys.XButton1 to Keys.LWin.
On(Keys.XButton1).
Press(ctx =>
{
    SendInput.ExtendedKeyDown(Keys.LWin);
}).
Release(ctx =>
{
    SendInput.ExtendedKeyUp(Keys.LWin);
});

でも修飾キーとして利用する場合はリピートできるOnDecomposedを利用して記述する必要があるっぽい

OnDecomposed(Keys.XButton1).
Press(ctx =>
{
    SendInput.ExtendedKeyDown(Keys.LWin);
}).
Release(ctx =>
{
    SendInput.ExtendedKeyUp(Keys.LWin);
});

修飾キーの挙動的に

Alt Alt Alt Alt Alt Alt Alt

みたいに連続で入力されているときにRを入力すると「Alt + R」のブロックができて「Alt + R」として解釈されるっぽい

Alt Alt Alt Alt Alt 「Alt + R」 Alt

Onで実装すると一回しか入力されないから多分同時入力受付の期間を過ぎて正しく動作しないってことだと思う。(なので正しく同時入力すれば動作するんだとは思うけど、わざわざOnで実装する必要もないね)

umeru9umeru9

ひとまずいろんなソフト入れたくはないのでCreviceでなんとかできないか試してみる

いつもよく使う
macで設定している「RightCmd+;」をバックスペースにするのを実装してみる
windowsなので「RWin+;」をバックスペースにする

キーリストはcomplete-list-of-keysから確認できる

下記で実現できた
感覚としてはOnDecomposedのほうがRWinキーでOn側が;っぽいが
Onを押すと入力を受け付けが開始してその間にDecomposedで組み合わせが検知されるらしい

var Whenever = When(ctx =>
{
    return true;
});

Whenever.
On(Keys.RWin).
OnDecomposed(Keys.OemSemicolon).
Press(ctx =>
{
    SendInput.ExtendedKeyDown(Keys.Back);
}).
Release(ctx =>
{
    SendInput.ExtendedKeyUp(Keys.Back);
});
umeru9umeru9

次に「RWin+L」で「→」を実現する
これはWindowsの仕様でWin+Lが画面ロックにアサインされているのでうまくいかない可能性もある

上記と同じ感じで実装するとこうなる。
実行するとエラーにはならないが画面ロックが優先されてしまう

Whenever.
On(Keys.RWin).
OnDecomposed(Keys.L).
Press(ctx =>
{
    SendInput.ExtendedKeyDown(Keys.Right);
}).
Release(ctx =>
{
    SendInput.ExtendedKeyUp(Keys.Right);
});
umeru9umeru9

次に試すこと

  • レジストリを変更してRWinを半角/全角キーに変換する
  • 半角/全角+Lで→になるか確認
umeru9umeru9

レジストリでRwinを半角/全角に変更することはできた

こちらを参考にした。
生成されたファイルの一部が間違っているっぽくて、キーの数の部分が最後の終了宣言も含むみたい。
そのため生成されたファイルのキーの数の部分を+1した
https://map-scan-code.soncho-works.com/scancode

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]

"Scancode Map"=hex:00,00,00,00,00,00,00,00,\
03,00,00,00,1D,00,3A,00,29,00,5C,E0,00,00,00,00
umeru9umeru9

一方でAutoHotKeyでは修飾キーしか利用できないっぽいな...
https://ahkwiki.net/Hotkeys

一方Creviceでは普通のキーの組み合わせでもできるっぽい
やはりCreviceにしたほうがいいかも半角/全角の代わりに利用できるキーを選定する

umeru9umeru9

無変換キーが使えそう。普段使っていないのでこのキーが使えなくなっても困らない。

レジストリを再度書き換えて半角/全角の部分を無変換に書き換えて
Google日本語入力のキー変換のところで無変換に該当するものを削除する(誤作動を防ぐため)
 無変換とShift+無変換に対応するものがあった

umeru9umeru9

無変換とかなモードで試したけど無理だった。
別の方法としてNumlockを指定する方法があった。
現在使っているキーボードはテンキーがついていないので代わりにつかってもOK。

実際に設定してみると「numlock + ;」がバックスペースになった。
当たり前だけどnumlock(RWin)キーを押すとnumlockのON/OFFのメッセージが出てきてしまうがショートカットのときだけなら表示されないのでギリ許容できる。

他の方法がないので一旦こちらでこの先の設定を進める。

ログインするとコメントできます