Charakter

Charakter

  • 0

くろま記事第21回/キーボードのリマッピング (設定除外キー編)

Öffentlich
前回の記事の続き、というかむしろこちらが本編なのかもしれません。FFXIVでAutohotkeyを使うメリットとして最も大きいのは、設定除外キーにキーバインドが可能になるということです。



上の画像に示されているように、日本語キーボードの左端と下端の大部分はその単独のキーストロークをゲーム中のキーバインド設定で使うことができません。ここでAutohotkeyを使って設定可能なキーに入れ替えればバインドすることが可能になります。

入れ替え先の候補として適当なのは、未割り当てだろうと思われるキーボード右側Enter付近のキーや、F9~F12、Ins~PgDn、テンキーなどでしょう※1。なお入替え先として避けた方がいいと思われるのは、画面での見かけ上区別が付かない"\"(キーボード右上)と"\"(右下)※2や、修飾キーとの組合せで別キーのストロークが発生するScroll Lock、Pauseです※3


[AutoHotkeyによるキーリマップの基本]

非常に簡単で基本的にはリマップ元のキーとリマップ先のキーを"::"で繋げて書くだけです。詳しくはwikiのリマップのページを参照ください。リマップは双方向ではなく単方向なので、入替とは違うことには注意してください。


[設定除外キーのリマップ例]

無変換や変換などの日本語キーボードに特有のキーは仮想キーコード(AHK上ではVkから始まる4桁のコード)またはスキャンコード(AHK上ではSCから始まる4桁のコード)で指定する必要があります。詳しくはキーリストのページを参照ください。なお基本的にAHKでリマップする際は仮想キーコードでなくOSや言語設定に依存しないスキャンコードを使って指定した方が無難だと思います。
以下そうしたキーも含め、設定除外キーをそれぞれ適当に選んだ設定可能キーにリマップした例を示します。

Zum Anzeigen klicken Zum Verbergen klicken

#IfWinActive ahk_class FFXIVGAME{

;左Winキーを@にリマップ
LWin::@
;アプリケーションキーを:にリマップ
AppsKey::sc073
;無変換をPage Upにリマップ
sc07b::PgUp
;変換をPage Downにリマップ
sc079::PgDn

}



[仕様が特殊なキーのリマップ例]

半角/全角やCaps Lock、ひらがなキーは、OSに依存する仮想キーコードに関して発生するキーストロークが複雑なものになっています。スキャンコードで指定すれば基本的に問題ないですが、キーリピートの仕様が通常のキーとは違い、upとdownが逆に発生したり、downのみが発生したりするため※4※5、書き方を少し変える必要があります。以下はその一例になります※6

Zum Anzeigen klicken Zum Verbergen klicken

#IfWinActive ahk_class FFXIVGAME{

; CapsLockキーでF9キー押下
*sc03a::Send, {Blind}{F9}

; ひらがなキーでカンマ押下
*sc070::Send, {Blind}{`,}

; 半角/全角キーでF11キー押下
; Alt+半角/全角はIMEのON/OFFのままにする
*sc029::Send, {Blind}{F11}
~!sc029::return

}


[ShiftやCtrlのリマップ]

Shift+1やCtrl+1などの組み合わせを使う場合は完全にマウスサイドボタンに任せており、左手小指でShiftやCtrlを使うことはない、という人にはShiftやCtrlの小指ちょん押しに別の機能を持たせることが可能です※7。ポイントはマウスのサイドボタンへの割り当ては右Shift、右Ctrlを設定し、本リマップでは左Shift、左Ctrlを指定することで、サイドボタンのちょん押しではリマップが発動しないようにすることです※8
下の例ではShiftとCtrlのupイベントをフックしてファンクションキーにリマップしています。upをフックするのは、チャット欄入力時にCtrl+のコピペやShift+の大文字入力をそのまま使えるようにするためです。Shift upにリマップするキーはF11やF12などの、文字入力がされずIMEの機能的にも影響が出にくいキーに設定してください。
なお~*LShift::returnを書くことでShiftのdownイベントを乗っ取らないようにしています。

Zum Anzeigen klicken Zum Verbergen klicken

#IfWinActive ahk_class FFXIVGAME{

; ShiftキーupでF12キー押下
*LShift up::Send,{Blind}{LShift up}{F12}
~*LShift::return

; CtrlキーupでF10キー押下
*LCtrl up::Send,{Blind}{LCtrl up}{F10}
~*LCtrl::return

}



[レジストリ変更によるリマップ]

AutoHotKeyのような常駐する外部ツールは使いたくないという方にはレジストリを変更してキーを入れ替えるアプリケーションを使うとよいでしょう。ただしレジストリ変更はPC再起動が必要になるので、当然PCの日常使いでもキーは変更されたままになります。
色々フリーウェアがあると思いますが、KeySwap for XPがWindows10でも問題なく動いて使いやすかったのでおすすめです。またChange Keyも各所でよくおすすめされています。



Zum Anzeigen klicken Zum Verbergen klicken


※1 個人的にはテンキーはアイテム窓や装備窓や手帳などをまとめるのをお勧め。自分の場合はそうしたシステム系コマンドを全部テンキーにまとめて右手で開いています。またNumLockは無効化しておくことを強く推奨します
※2 "\"(右上)と"\"(右下)はFFXIVでも別キー扱いで普通にバインドできるのですが、表示上どちらも半角の"\"になり、後から見返したときにどちらのキーのことなのかわからなくなって混乱するのであまりお勧めできません。
※3 Scroll LockとPauseはCtrlとの組み合わせで"CtrlBreak"のキー入力が発生し、これが設定除外キーとなっておりバインドできません。機能させるには{Blind}などを使ってうまく書く必要があります。Print Screenはキーボードの仕様上はAltとの組み合わせでSysReqというレガシーなキー入力が発生するらしいですが、実際今のWindowsOSだと発生しないのでバインドしても特に問題はありません。ただスクショ撮影のバインドを敢えて別のキーに任せることもないでしょう。
※4 半角/全角キーの仮想キーコードについては、IME OFFだとvkF3 up, vkF4 downの順に、ONだとvkF4 up, vkF3 downの順にイベントが発生します。トグルの機能を果たすキーは基本的にup downの順番にイベントが発生する仕様になっているようです(スキャンコードのmake breakにどう対応しているのかとかいまいちよくわかりませんでしたが)。いずれにせよスキャンコードはsc029で全て同じでありdownは必ず含まれているのでスキャンコードで指定すれば問題ないようです。なおAlt+半角/全角はIMEのON/OFFに関わらず別の仮想キーコードのvk19(スキャンコードはsc029のまま)が発生します。通常のコンビネーションキーと違い、先にAltを離した場合はvk19はdownのみでupが発生しなくなるようです。
※5 英数CapsLockについては、単独で使うと日本語キーボードではいわゆる「英数」の部分の機能となります。これは「ひらがなカタカナ」と対応していて、例えばこれらを押すとIME上では英数モードとひらがなモードが切り替わるようになっています。仮想キーコードもこの挙動に対応しており、英数Capsを最初に押した場合、vkF2 up, vkF0 downの順に発生し、2回め以降はvkF0 downのみが発生し、一方でひらがなキーは初回がvkF0 up, vkF2 down、2回め以降はvkF2 downのみが発生します。つまり、一方を押すことで他方が上がるような感じです。こちらもスキャンコードは変わらない(英数CapsLock:sc03A、ひらがなカタカナ:sc070)のでそちらで指定するのがよいでしょう。Shift+CapsLockは本来のCapsLockの機能を割り当てられているため別の仮想キーコードのvk14のdown, upが発生します。Alt+ひらがな(IME上ではかな入力ローマ字入力の切替)は半角/全角のように2つの仮想キーコードのup,downによるトグルが発生するようです。
※6 単純に"::"で繋げるリマップで書くと、Capsやひらがなキーはスキャンコードでもdownしか発生しないため、リマップ先もdownしか発生せずうまく動作しません。Sendで書くことにより、down upの一連のストロークが発生します。なおこの例では通常のキーリピートを再現できているわけではないので例えば移動キーなどに設定はできません。仮想キーコードのイベントをきちんとdown upに整形すれば再現できるかもしれませんが難しそうです。
※7 ターゲッティング関連をバインドするのをオススメです。自分はShiftちょん押しに「一番近くの敵をターゲット」をバインドしています。
※8 なおこのスクリプトのリマップでは、Shift+1などの入力を小指を使って行う場合(LShiftで行う場合)でもShift+1の発動は可能です。ただしShift+1の発動後であってもShiftを押し上げるときにF12が入力されます。マウスボタン(RShift)を使う場合はF12入力は起きません。条件分岐をうまく書けばこの辺りも変えられると思いますが、自分は小指使ってのShift+1入力を全くやらないのでこのままにしてます。

Kommentare (0)
Kommentar verfassen

Community-Pinnwand

Neueste Aktivitäten

Die Anzahl der anzuzeigenden Einträge kann verringert werden.
※ Aktivitäten, die Ranglisten betreffen, werden auf allen Welten geteilt.
※ Aktivitäten zur Grüdung von PvP-Teams können nicht nach Sprache gefiltert werden.
※ Aktivitäten deiner Freien Gesellschaft können nicht nach Sprache gefiltert werden.

Nach Art des Eintrags sortiert
Datenzentrum / Stammwelt
Sprache
Anzahl