Yona’s blog

思いついたらなんか書く

AutoHotKeyで右クリック禁止!F1キーも禁止!何もかも禁止!

本記事はAutoHotKey回です。前回はWindows上にMacOSのようなEmacsライクキーバインドを実装する方法を解説しました。

ic121241.hatenablog.com

AutoHotKeyは特定の組み合わせのキーを、全く別なキーに変換することができます。単に入れ替えるだけでなく、そのキーが全く使えないように無効化することもできます。 入力したくないキーを引きちぎっても良いんですけど、AutoHotKeyでスマート(?)に解決しましょう

ことの発端はWindowsのF1キーがあまりにも廃棄物過ぎたので、どうにか無効化しようと思い立ったからです。 F1だけじゃなくてCapsLockも潰したい、Insも潰したい……。なんなら ascii code0x20~0x7Eの範囲しか入力できないようにしてみるか……。

と、調子に乗ってストイックすぎるキーボードを作ってみることにしました

要件は以下です

  • F1キーを引きちぎりたい
  • 右クリックを禁止したい
  • Ctrl + zみたいなショートカットキーを禁止したい
  • ネットサーフィンぐらいしかさせないようにしたい

つまり、[a-zA-Z0-9]とEnter,SPC,BS以外存在しないキーボードにしたい。

図書館とかにおいてある官製用PCか?と突っ込みたくなりますね。 あのPCすごいですよね、Ctrl+Alt+Del以外ほぼ何もできなくて感動を覚えます。

AutoHotKeyでキーの入れ替え

AutoHotKeyの基本ですが、以下のようにしてAキー単押しをEキー単押しに変更できます。

a::e

もし、Aキーを常に「Shift + A」や「Ctrl + A」と入力されてほしいときは次のようにします。

; a -> Shift + a
a::{+a}
; a -> Ctrl + a
a::{^a}
; a -> Alt + a
a::{!a}
; a -> Win + a
a::{#a}

; 逆も然り。これは修飾キーとの同時押しを、装飾キーが押されなかったのと同等の入力にします
+a::a
^a::a
!a::a
#a::a
; 全ての修飾キーを表すときは下記のようにする
*a::a

特定のキー入力の無効化

あるキーを別のキーへ変換する方法はわかりました。次は「何も入力しない」に変換する方法をお伝えします。

Returnを書くだけで一発です。AutoHotKeyにおける「::」はプログラミング言語で言うところのGOTOラベルのようになっているので、Returnで「何も入力しない」を表現できます。

; Ctrl + [a-z]による全選択を無効化する
^a::Return
^b::Return
︙
^z::Return

キーボード、マウスからの入力のうち、無効化したいものを選ぶ

無効化したい入力を列挙して、雑にコードに書けばオールオッケーです。

というわけで無効化したいもの一覧

  • [Ctrl / Shift / Alt / Win] + [F1~F24]
  • ESC、CapsLock、AppsKey、PrintScreen、Pause、Break、Sleep、Help、ScrollLock、NumLock、Tab
  • PgDn、PgUp、Home、End、Del、Ins
  • Alt、Ctrl、Winの単押し
  • Ctrl + [a-z]のショートカットキー
  • テンキー全部
  • マウスの左クリックとホイール上下以外
  • ブラウザの戻る進む
  • メディア、プレイヤーの操作
  • アプリ起動ボタン

それらを実現するコードがこちらになります。 微妙に関係なさそうなコードも混ざっていますが、それは後述します。

;; start as Suspend mode
Suspend, 1

;; Ctrl-Shift-Alt-z command for susupend mode Toggle
^!+z::
  Suspend, Toggle
  Return

;; function keys invalid
*F1::Return
*F2::Return
*F3::Return
*F4::Return
*F5::Return
*F6::Return
*F7::Return
*F8::Return
*F9::Return
*F10::Return
*F11::Return
*F12::Return
*F13::Return
*F14::Return
*F15::Return
*F16::Return
*F17::Return
*F18::Return
*F19::Return
*F20::Return
*F21::Return
*F22::Return
*F23::Return
*F24::Return

;; General keys invalid
Esc::Return
CapsLock::Return
AppsKey::Return
PrintScreen::Return
Pause::Return
Break::Return
Sleep::Return
Help::Return
ScrollLock::Return
NumLock::Return
*Tab::Return
!Space::Space
^Space::Space
#Space::Space
+Space::Space

;; cursor command keys invalid
*PgDn::Return
*PgUp::Return
*Home::Return
*End::Return
*Del::Return
*Ins::Return

;; modifire keys invalid
Alt::Return
LWin::Return
RWin::Return
Ctrl::Return

;; Ctrl-[a-z] shortcuts invalid
^a::Return
^b::Return
^c::Return
^d::Return
^e::Return
^f::Return
^g::Return
^h::Return
^i::Return
^j::Return
^k::Return
^l::Return
^m::Return
^n::Return
^o::Return
^p::Return
^q::Return
^r::Return
^s::Return
^t::Return
^u::Return
^v::Return
^w::Return
^x::Return
^y::Return
^z::Return

;; Numpad keys invalid
Numpad0::Return
NumpadIns::Return
Numpad1::Return
NumpadEnd::Return
Numpad2::Return
NumpadDown::Return
Numpad3::Return
NumpadPgDn::Return
Numpad4::Return
NumpadLeft::Return
Numpad5::Return
NumpadClear::Return
Numpad6::Return
NumpadRight::Return
Numpad7::Return
NumpadHome::Return
Numpad8::Return
NumpadUp::Return
Numpad9::Return
NumpadPgUp::Return
NumpadDot::Return
NumpadDel::Return
NumpadDiv::Return
NumpadMult::Return
NumpadAdd::Return
NumpadSub::Return
NumpadEnter::Return
;NumLock::Return

;; mouse button invalid
;LButton::LButton
RButton::Return
MButton::Return
XButton1::Return
XButton2::Return
;WheelUp::WheelUp
;WheelDown::WheelDown
WheelLeft::Return
WheelRight::Return

;; browser shortcuts invalid
Browser_Back::Return
Browser_Forward::Return
Browser_Refresh::Return
Browser_Stop::Return
Browser_Search::Return
Browser_Favorites::Return
Browser_Home::Return
Volume_Mute::Return
Volume_Down::Return
Volume_Up::Return
Media_Next::Return
Media_Prev::Return
Media_Stop::Return
Media_Play_Pause::Return
Launch_Mail::Return
Launch_Media::Return
Launch_App1::Return
Launch_App2::Return

今のままでは(ほぼ)自力で解除できない切腹仕様

さて、次にこの大リーガー養成ギプス状態を解除する方法をお伝えします。 ここまで読んでくれた賢い人であれば気づくだろうが、現状存在しません。(※) 右クリックが使えずAutoHotKeyを止めることができませんので、脱出ボタンを用意しましょう。

その脱出ボタンというのが、先程の微妙に関係なさそうなコードのことです。 その部分について説明します。

ショートカットキー有効/無効の状態はAutoHotKeyの有効/無効で制御しています。 AutoHotKeyの有効/無効状態の切り替えを、特定のショートカットキーで実現しています。 その部分が下記コードの部分です。「Ctrl + Shift + Alt + z」で切り替えるようにしています。 普通に操作していて(多分)ほぼ押されることのないようなものを選びました。 ここは僕のオリジナル要素なので、各人好きに書き換えても大丈夫です。

;; start as Suspend mode
Suspend, 1

;; Ctrl-Shift-Alt-z command for susupend mode Toggle
^!+z::
  Suspend, Toggle
  Return

※ちなみに、OSにとって優先度の高い「Ctrl+Alt+Del」とか「Ctrl+Shift+Esc」がAutoHotKeyでは無効化できない(やりたければ要レジストリ書き換え)ので、タスクマネージャーを起動してどうにかAutoHotKeyを終了する方法もあります。