ひらがなカタカナキーをF21キーに変更
AutoHotkeyのスクリプトを書いていると、ひらがなカタカナキーがDownされたっきりUpされないという事態に。そこで、「ChangeKeyを使用してWindowsキーをF13キーに変更する方法」を利用して、ひらがなカタカナキーをF21キーにして問題解決。
ちなみに、キーの履歴を見ると、ひらがなカタカナキーとして「vkF0sc070」と「vkF2sc070」が表示されており、UpとDownで異なる表示がされていました。ここらへんが何か関係あるのかも。
このキーと同じように、CapsLock、半角/全角も扱いにくいキーですが、ChangeKeyで他のキーと置き換えてからカスタマイズする分にはそれほど問題にならない、はず。
片手用キーボードHalfKeyboardをAutoHotkeyでエミュレーションする
片手用キーボードHalfKeyboardのキーバインドを、キーバインドを変更するソフトウェア(AutoHotkey)を使ってエミュレーションして、通常キーバインドと入れ替えたりしながら使ってみようというエントリ。
片手用キーバインド
片手用キーボードとは、左手もしくは右手だけで扱うために設計されたキーボードのことです。キーボード自体の省スペース性や、片手が自由になるということ、また片手が不自由な人にとっての利便性などから利用されています。
代表的な片手用キーボードには「FrogPad」や「CutKey」、「HalfKeyboard」などがあります。また、「G13」や「n52teの後継
」などのゲーミングキーパッドのキーバインドを「AutoHotkey」や「MagicKeyPad」変更して実現することもあります。
今回は専用・特殊デバイスを一切使わずに、普段使っているフルキーボード(JIS)のキーバインドをAutoHotkeyで変更してHalfKeyboard化してみます。しかしもちろんこの方法は、「G13」や「n52teの後継
」などのゲーミングキーパッドを利用する場合にも役に立つので、これらの購入を検討している人もチェックしてみてください。
AutoHotkeyで無変換+数字をファンクションキー(F1-F10)にする方法
「AutoHotkeyで修飾キー(Ctrl,Shift,Alt,Win)の状態(^!+#)を取得する関数を作る方法」で作成したget_modifiers関数と、「AutoHotkeyで変数名を組み立てて変数の中身を取得するちょっと不思議な方法」で作成したget_postfix_key関数を利用して、無変換+数字をF1-F10に割り当ててみます。
無変換+数字をFキーに割り当てるAutoHotkeyスクリプト(.ahk)
コードは以下の通りです。
~vk1Dsc07B & 1:: ~vk1Dsc07B & 2:: ~vk1Dsc07B & 3:: ~vk1Dsc07B & 4:: ~vk1Dsc07B & 5:: ~vk1Dsc07B & 6:: ~vk1Dsc07B & 7:: ~vk1Dsc07B & 8:: ~vk1Dsc07B & 9:: ~vk1Dsc07B & 0:: postfix_key := get_postfix_key() if postfix_key = 0 postfix_key := 10 modifiers := get_modifiers() Send, %modifiers%{F%postfix_key%} return get_modifiers() { modifiers := "" if GetKeyState("Ctrl", "P") modifiers = %modifiers%^ if GetKeyState("Shift", "P") modifiers = %modifiers%+ if GetKeyState("Alt", "P") modifiers = %modifiers%! if GetKeyState("Win", "P") modifiers = %modifiers%`# return %modifiers% } get_postfix_key() { StringSplit, hotkey_array, A_ThisHotkey, %A_Space%&%A_Space% StringTrimLeft, postfix_key, hotkey_array%hotkey_array0%, 0 Return postfix_key }
「vk1Dsc07B」は無変換キーを表していますここでは仮想キーコードとスキャンキーを両方書いていますが、片方で良いかもしれないです
get_postfix_key()では、prefixkey(無変換キー)と同時に押したキー(0,1,...,10)を検出しています。これにより、無変換+数字に対して一貫したコードを記述できています。
また、このようなコンビネーションキーを記述した場合、CtrlやShiftを表す^や+などの修飾キーを「::」の前に含めることが出来ないので、get_modifiers()を利用してCtrlやShiftの状態を取得しています。
このようにして、get_postfix_keyとget_modifiersを使用することできれいに「無変換+数字→ファンクションキー」を実現できています。
Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Advanced Windows 第5版 上 (マイクロソフト公式解説書)
インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)
APIで学ぶWindows徹底理解
AutoHotkeyで修飾キー(Ctrl,Shift,Alt,Win)の状態(^!+#)を取得する関数を作る方法
modifier(修飾キー)を取得する
押し下げ状態は、GetKeyStateで取得できます。今回は、その結果を、Sendの引数として利用できる形式(^、+、!、#の結合)で取得する関数get_modifiers()を作成します。
get_modifiers()
定義は次の通り。
get_modifiers() { modifiers := "" if GetKeyState("Ctrl", "P") modifiers = %modifiers%^ if GetKeyState("Shift", "P") modifiers = %modifiers%+ if GetKeyState("Alt", "P") modifiers = %modifiers%! if GetKeyState("Win", "P") modifiers = %modifiers%`# return %modifiers% }
現在キーボードのWinキーをF17キーに変更してしまったのでWinキーについては試せていませんが、他の修飾キーに関しては問題なく動作しています。
modifiers := get_modifiers() Send, %modifiers%{%key_name%}
のようにして、利用できると思います。特に「AutoHotkeyで変数名を組み立てて変数の中身を取得するちょっと不思議な方法」などと組み合わせるといろいろ出来ると思います。お試しあれ。
Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
Advanced Windows 第5版 上 (マイクロソフト公式解説書)
インサイド Microsoft Windows 第4版〈上〉 (マイクロソフト公式解説書)
APIで学ぶWindows徹底理解
AutoHotkeyで関数の返値を変数に代入する書き方
そのうち忘れそうなのでメモ。
variable_name := function_name()
間違えて
variable_name = function_name()
としてしまうと、変数の中に「function_name()」という文字列が入ってしまう。