読者です 読者をやめる 読者になる 読者になる

Corredor

ウェブ、プログラミングの勉強メモ。

右 Windows キーがないキーボードでアプリケーションキーを右 Windows キーの代用にする・ただし単体で押した時はアプリケーションキーとして使う

経緯

ぼくは過去の記事で何回か、「Windows で使う日本語キーボードは右 Windows キーがある109配列が好きだ」と発言してきた。

neos21.hatenablog.com

現在自宅で使っているのは、上の記事に書いたサンワサプライの109キーボードなのだが、会社にはそれまで使っていた Logicool の108配列キーボードを持っていって使っている。

neos21.hatenablog.com

この Logicool MK275 は、右 Windows キーがない日本語108キーボードで、とにかくつらい。Win + RWin + E を押す時の Windows キーは右 Windows キーを使っているので、それができないと途端に「ああもうダメだ仕事になんねぇ帰ろ…」となってしまう。

そこで、同じくキーボード右側に配置されている「アプリケーションキー」を、右 Windows キーの代用にできないかを調べてみた。

キーリマップができるフリーソフトを色々探したのだが、どうもアプリケーションキー単体をいじくる機能がないか、いじれても元のアプリケーションキーとしての機能は失うモノしかなかった。いや、そうじゃないんだ、他のキーと合わせて押した時は Windows キーの代わりをしてほしいが、単体で押した時は普通のアプリケーションキーとして動作してほしいのだ

これはぼくが Excel で「アプリケーションキー → E」と押すことで「コピーしたセルの挿入」を多用しているから、というたったそれだけの理由なのだが、こんなワガママは通らないものか…と色々考えていた。

そこでふと、以前 Atom エディタのショートカットを作る時に導入した、AutoHotKey というフリーソフトのことを思い出した。

neos21.hatenablog.com

AutoHotKey の本来の使い方は、独自のショートカットキーを作るモノだ。このソフトなら、自分でスクリプトを書いて狙ったことができるかもしれない…。

というワケで作った

というワケで、以下が自分で作った AutoHotKey スクリプト

導入するには、AutoHotKey を Windows にインストール後、上のコードをコピペして「AppsKeyToWinKey.ahk」といった名称でどこかに保存する。

AutoHotKey のダウンロードは以下から。

.ahk という拡張子が、AutoHotKey のスクリプトであることを示している。このスクリプトファイルをダブルクリックで実行すると、タスクトレイに AutoHotKey のアイコンが常駐し、特定のキー入力があったときに AutoHotKey が反応してくれる、という仕組み。

スクリプトについて

AutoHotKey スクリプトの書き方を調べながら書き始め、最後は力技で解決している感があるので、もっと良いやり方がないか気になっている。

ひとまず今回何をやったのかのほとんどは、以下の1行で説明ができる。

AppsKey & r::Send, {LWin down}r{LWin up}

「複数のキーを同時に押した時に何かする」というトリガーを宣言するには、AppsKey & r:: というように、それぞれのキー名を & で繋ぎ、コロン2つ :: で定義する。

次に、トリガーが入力されたら「複数のキーを同時に押す動作をする」と書くときは Send, というコマンドを使う。このあとに Win & r みたいに書ければよかったのだがどうも上手く行かず、結局 {LWin down}r{LWin up} と書いた。これは、

  • {LWin down} … 左 Windows キーを押し下げる
  • r … R キーを押す
  • {LWin up} … 左 Windows キーを離す

というキー入力を順に書いており、これによって Win + R というショートカットを実行している。

あとはこれを、Windows キーを使った主要なショートカットの分だけ羅列して、上記のようなコードになった

アプリケーションキーと共に押下したキーをそのまま送る、みたいなことができれば、つまり「AppsKey & 【何か】::Send, LWin & 【何か】」みたいな書き方ができれば、本当に1行で済むのだが、うまく探せなかった。何か入力するキーを保持するスクリプトとかあったっぽいけど、うまく適用できそうになくて諦めちゃった。

Win + L とか入ってないけど、この時は左 Windows キーしか使わないから書いていない。組み合わせで打つショートカットキーは両手で打つのがぼくの打ち方なのだ。だから本当は Win + EWin + RWin + D ぐらいだけでもとりあえず良かった。w

さて、最後にある

AppsKey::AppsKey

この1行だが、これは先程の AppsKey & r:: といったコンビネーションキーの宣言をしてしまうと、1つ目のキーを単体で押下した時の元々の動作がキャンセルされてしまう、という AutoHotKey の仕様があり、これを回避するために書いた。

単一キーを押下した時に、というトリガー部分は AppsKey:: で先程と同様。そのあと何のキーを押したことにするか、という部分は、単一キーにリマップする場合は直接 AppsKey などと書ける。

すなわち、アプリケーションキーを一切使う気がなければ、AppsKey::LWin とでもしてやれば、アプリケーションキーを左 Windows キーに見せかけて使えるようになるはずだ。

単一キーの元々の動作を有効にするためのスクリプトの書き方が、こういうイディオムで良いのか分からないが、こう書けばとりあえずアプリケーションキーを単体で押下した時はアプリケーションキーとして動作するようになった。


以上。今更知ったけど AutoHotKey ってけっこう可能性ありそう。

AutoHotKey スクリプトを書く際に参考にしたサイト