[AHK]$(ドルマーク)の効果検証

AutoHotKeyのキー修飾の「$」を見ると下記のような説明が書いてあるが、正直分かりにくい。

RegisterHotkey()ではなく、強制的にキーボードフックでイベントを取得する。(NT系専用)

サブルーチン内でそのホットキー自身を送信する場合、RegisterHotkey()ではホットキーイベントが再帰的に呼び出されてしまう。

#UseHook指令を使えば、$を省略できる。

http://ahkwiki.net/Hotkeys

というわけで、実際に動作検証。

例えば下記のように設定して、wキーを押すと、「qry-ac-ddffZ」と出力される。

w::Send qwerty
e::Send -abbc
t::Send -ddbbff
b::Send Z

AutoHotKeyはSendで出したキー出力も入力として受け付けるみたいなので、

  1. wキーが押される
  2. Sendが起動「q」「w」「e」「r」「t」「y」を出力。
  3. キーバインドが設定されてる「w」「e」「t」は処理が保留。それ以外の「q」「r」「y」はそのまま出力
  4. 「w」「e」「t」の処理が開始
  5. 1つの処理の中で、一度実行されたキーバインドは再実行されない仕様のようなので、「w」は破棄。
  6. 「e」の処理開始。キーバインド設定がある「b」を除き出力。「b」の処理はプール。
  7. 「t」の処理開始。「e」と同様に処理。
  8. 「b」の処理を実行

という感じの処理をしてるみたい。

「$」を先頭につけると、付けたキーバインドはSendが出したキー入力だと動かなくなる。下記のように「$」を付けると、「qwry-abbc-ddbbff」という感じで出力される。

$w::Send qwerty
e::Send -abbc
t::Send -ddbbff
$b::Send Z

一つずつ「$」付けるのが面倒な場合、#UseHook Onと記述すると、以降のコードは「$」を付けたのと同じことになる。外す場合は#UseHook Offでオフになる。

例えば、下記のように書いてwを押すと、「qwery-ddffZ」と出力される。

#UseHook On
w::Send qwerty
e::Send -abbc
#UseHook Off
t::Send -ddbbff
b::Send Z

UseHookの説明見ると、

AutoHotkeyではホットキーの登録はデフォルトで RegisterHotkey() というウィンドウズAPIを使用して行われる。このAPIで登録できないホットキーだけをフックを使って実現している。しかし、ホットキーラベル定義で $オプションをつけるか、#UseHook を使用すると、どんなホットキーでもフックを使うようになる。

フックを使用すると、RegisterHotkey()を使用するより反応が速くなる場合がある。

http://ahkwiki.net/-UseHook

と書いてある。

不必要なバインドが誤爆すると困る、速度向上も期待できそうなので、基本的に#UseHook Onとして使うほうが良さそう。

コメント

  1. げんまい より:

    UseHookの意味がわからなかったのですが、こちらの解説を読んで理解できました。
    解りやすい解説でとても参考になりました。ありがとうございました!

PAGE TOP
Ads Block Detector Powered by codehelppro.com
Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました