AutoHotKey - キーを押したままにする

AutoHotKey - キーを押したままにする

F3を押し続けるとヒットしCtrlF2を放すとヒットする AutoHotKey スクリプトがありますCtrl

私の現在のスクリプト:

$ctrl::
Suspend, On
Send, {F3}
While (GetKeyState("Ctrl",P))
{
}
Send, {F2}
Suspend, Off
Return

しかし、 を押し続けるとCtrl何も起こりません。 を放すと、と のCtrl両方にヒットします。 これを修正する方法を教えていただけますか?F3F2

答え1

このコードは必要な機能を提供します:

$~ctrl::
    send {f3}
    keyWait, ctrl
    send {f2}
return

答え2

キーアップホットキーのオプションが必要なようです。

以下はテスト済みの動作コードです:

Ctrl::
Send {F3}
keywait, Ctrl, L ; prevent F3 from firing while Ctrl is being held down.
return

Ctrl Up::Send {F2}

答え3

経由:http://www.autohotkey.com/docs/commands/Send.htm

キーを押したままにしたり放したりするには、キーの名前の後に Down または Up という単語を続け、中括弧で囲みます。例:

Send {b down}{b up}
Send {TAB down}{TAB up}
Send {Up down} ; 上矢印キーを押します。
Sleep 1000 ; 1 秒間押したままにします。
Send> {Up up} ; 上矢印キーを放します。

上記の方法でキーを押したままにすると、物理的に押したままにした場合のように自動繰り返しは開始されません (これは、自動繰り返しがドライバー/ハードウェア機能であるためです)。 ただし、ループを使用して自動繰り返しをシミュレートできます。次の例では、20 回の Tab キーストロークを送信します:

Loop 20 {
Send {Tab down} ; 自動繰り返しは、連続するダウンイベント (アップイベントなし) で構成されます。
Sleep 30 ; キーストローク間のミリ秒数 (または SetKeyDelay を使用)。
}
Send {Tab up} ; キーを放します。

DownTemp という単語も使用できます。その効果は、修飾キー (Control/Shift/Alt/Win) を除いて、Down と同じです。これらの場合、DownTemp は、キーが永続的に押されているわけではなく、キーストロークが要求するたびに解放される可能性があることを後続の送信に伝えます。たとえば、Send {Control DownTemp} の後に Send a を続けると、Control-A キーストロークではなく、通常の "a" キーストロークが生成されます。

関連情報