のら(NORA)のブログ

主にソフトについて備忘録で(手抜き)書いているのです!ご自由に観覧しやがれ、です。

autohotkey2.0勉強中(翻訳)その3(リマップ編)

前→(ホットストリング編)

最終更新日: 2017/9/17

目次

はじめに

最後の方訳すのめんどくさくなってきた

その1のコピペ

翻訳とかあんま得意じゃないんだけど
間違いあったらコメくれれば訂正します。というか自分も間違えて覚えてしまうから(´・ω・`)

一応各説明ごとに例は必ず一つ入れている
手抜きだからかなり見にくいかも
定期的に修正入ると思う

参考:ahkwiki日本版様及び公式ヘルプ

リマップ編

リマップとはキーボードのキーをの入力を別のキーの入力にすること(みたいな感)
キーの指定の方法はホットキーと同じようにできる
例えば右Ctrlなら>^

基礎

レジストリ書き換えとは異なるため、AHKの指定スクリプトが動作していないとリマップされない
逆にAHKスクリプトさえ起動していなければ通常のキーとなる
スクリプトの停止を切り替えることによってなんかできるかもね

リマップの仕方

以下のように書けば置換ができる

置換元キー::置換先キー

ex: aキーをbキーに、左Ctrlキーを右Ctrlキーに(適当だから間違ってるかも)

a::b
<^::>^
キーの入れ替え

以下のように書くと二つのキーを入れ替えることになる

a::b
b::a
  • a::B とすると大文字のBが入力される -まあ使わなさそうだけどこんな使い方出来るっていう
  • コンビネーションキー(&)は設定できない
ex: a & c::b は使えない

マウスのリマッピング

なんでこの表作ったんだろうね

マウスのリマッピング用表

名前 どのボタンか
LButton マウスの左ボタン(左クリック)
MButton マウスの真ん中のボタン(中クリック)
RButton マウスの右ボタン(右クリック)
XButton1 マウスの拡張ボタン1
他ボタンマウスのボタンのことで、OSのデフォルトで戻るに割り当てられているもの
XButton2 マウスの拡張ボタン2
他ボタンマウスのボタンのことで、OSのデフォルトで進むに割り当てられているもの
WheelUp ホイールアップ(↑スクロール)
WheelDown ホイールダウン(↓スクロール)
WheelLeft チルト左(横スクロールの←)
WheelRight チルト右(横スクロールの→)

その他便利事項的な

キーの入力の無効化

以下のように書くとキーの入力を無効化できる
これリマップだと思うんだけどねなんかホットキーに書かれてた

キーの指定::Return

ウィンドウ(ソフト)別に設定したいんだけど

  • #IfWinActive等(#IfWinActive/Exist項目)を使うことで、特定のウィンドウのみに適応できる

まあホットキーの時と一緒で、まだそこまで書けてないからwikiさんでも見てくれれば
日本語wikiさんの#IfWinActiveのページ

なんか正常に動作しないんだけど

ロック系キー(CapsLockなどのロックキー、カタカナ/ひらがなキー)のリマップをしたらおかしくなった

日本語配列では、ロック系キーなどをリマップすることはできないというか推奨されてない
なぜなら、AHK内でUnKnownKeyとして扱われることが多く、動作が不安定になる
例えば、カタカナ/ひらがなキーをリマップしたが、関係ないキーを押した際に勝手にWindowsキーが押されるとか(実際にあった)
これにより、ロック系キーのリマップはレジストリを使うのが良い

リマップしたキーが思ったように動作しないだけど(タイトルつけづらい)

a::bと置き換えた場合、^a のキーを押したら ^a としては機能せず、^b として機能するので注意

AltキーにリマップしたのにAltTabが動作しない

Altキーになるようにキーまたはマウスボタンをリマップしたとしても、そのリマップしたキーはAltTabの動作をしないことが多いらしい

回避策として、以下のホットキーを追加することがあるが、本当のAltキーの方でAlt-Tabを実行する際に正常に動作しない可能性がある
まあ推奨しないけどさ、もしこうするなら本当の方を使わないでリマップの方のみでAlt-Tabをやることをお勧めするよ
(こんな感じのこと書いてあった(随分意訳な気がするけど))
そうしたくないならレジストリで設定するか諦めるのがいいんじゃないかな

*Tab :: Send {Blind} {Tab}
自動実行セクションにSendModeが書いてある場合

SendModeが自動実行セクション(最上部に書くスクリプトのこと)で使用されている場合は、全てのリマップに影響するらしい

例えば、SendPlayモードを使用している場合で、リマップではSend {Blind}を使用してリマップしているらしく、SPモードでは、{Blind}を完全にサポートしていない
このため、SendPlayモード(特にControl、Shift、Alt、Win)ではリマッピングが正しく機能しないことがあるので注意
この問題を回避するには、スクリプト内にリマップがあるときにSPを自動実行セクションで使用しないこと
そうしても使いたい場合は、スクリプトの別の場所(自動実行セクション以外)でSPを使用する
また、SendEvent(SE)を使用したホットキーを用いたリマップも可能みたいなことが書いてあった

ホットキー用のコマンドがリマップにも影響する

スクリプトのどこかに以下のコマンドが書いてある場合はそれのせいかもしれない

Suspendコマンドあるいは、HotKeyコマンド
(使ったことないからわかんないから書けない)

ex: 一応例↓

Suspend, On  
Hotkey, *a, off  
Hotkey, *a up, off  

リマップの仕組み(応用)

スクリプトが起動されると、各リマップは1組のホットキーに変換されるらしい
たとえば、a :: bのリマップは実際には次の2つのホットキーの組み合わせになっている

*a::
SetKeyDelay -1   ; 置換先キーがマウスボタンの場合、代わりにSetMouseDelayが使用されます
Send {Blind}{b DownTemp}  ; DownTempはDownと似ているが、他のSendコマンドではDownしていないように認識されている点で異なるってさ  
return

*a up::
SetKeyDelay -1  ; これらのSetKeyDelaysのいずれかでpress-durationが指定されていない理由については、下記の注を参照してください。
Send {Blind}{b Up}
return

説明: (あってるかわかんないけど)

まず最初のホットキー

  1. 何かしらのキーと[a]キーが押されたときに{Blind}が送信される {Blind}は現在の各種修飾キー、Capsキーの状態を保持するコマンドみたいなもので、これにより各種修飾キーの状態が保持されたままになる

  2. この状態で、bを送信するので、例えばCtrlが押されたままならCtrl-bの動作になる

二個目のホットキー

  1. [a]キーが離されたときに再度{Blind}を送信する 多分さっき指定した{Blind}の状態を解除しているんだと思う、(公式ヘルプに何も書いてなかったから再度指定する意味が分からないからこんなところかなと)

  2. さっき下げた[b]キーを上げてもとに戻す

ちなみにSetKeyDelay -1 はキーの送信の速度を遅延なしにしている(他の動作に邪魔されないため)

ただし、上記のホットキーは次の状況により違う動作になる

  1. 置換元キーがLCtrlなどの修飾キーの場合

Send {Blind} {LAlt DownTemp}の行がSend {Blind} {LCtrl Up} {LAlt DownTemp}に置き換えられる
置換元キーがRCtrlの場合は、{RCtrl up}が使用される以外は同じになる

  1. マウスのボタン(RCtrl :: RButtonなど)にリマップしている場合

SetKeyDelayの代わりにSetMouseDelayが使用される
さらに、上記の一番最初のホットキーは次のように置き換えられ、キーボードのオートリピート機能によるマウスクリックが繰り返し発生することを防ぐようになっている

*RCtrl::
SetMouseDelay -1
if not GetKeyState("RButton") ; マウスの右ボタンはこの時点ではまだ押し下げられていない
    Send {Blind}{RButton DownTemp}
return

注:
上記のホットキーでは、SetKeyDelayの2番目のパラメータ(押下時間)が省略されている
これは、{b down}や{b up}のようなダウンまたは、アップ専用のイベントにはプレス時間が適用されないため
ただし、Shift / Ctrl / Alt / Winキーの状態の変更は、a::B ,a::^bなどのリマップに影響を及ぼすので、スクリプトの自動実行セクションを介して適応された押下時間がリマップ全てに影響を及ぼすため、注意してね的な

カスタムコンビネーションキーをリマップに使用したい

カスタムコンビネーションキーを1つのキーに直接リマップすることはできないが、上記のように、リマップはホットキーに変換されるため、それを利用してあたかもそうかのように設定できるみたい

ex: 例えば、a & c :: b というリマップをしたい場合
上記の *a:: を a & c:: に、また、*a up:: をa & c up:: に変更すればいい
どのような動作をしてるかは↑で既に記述したのでそちらを参照

a & c::
SetKeyDelay -1  
Send {Blind}{b DownTemp}  
return

*a & c up::
SetKeyDelay -1  
Send {Blind}{b Up}
return

次→(autohotkey勉強中その4-1)