身内の宣伝コーナー

 

フルオーダーから既製デザイン柔軟に対応!

袴ロンパースの製作販売してます!レンタルもやってます!

大口注文やレンタルのサブスクなど相談ください!

  

  

よかったら見てみてね

 

 

 

ココから本題 

さて、少しマニアックなことについて書きたくなったので書いてみたいと思います。

今回はAutoHotKeyのさらなるカスタマイズに向けての情報収集、もとい和訳集でも作りたいと思います。

なんせ元が英語なので…

 

例えばコレ

 

 

 

キーまたはマウス/コントローラボタンが離されるか、押し下げられるのを待つ。

KeyWait, KeyName , オプション
パラメータ
キー名
キーボードの任意の1文字、またはキーリストのキー名(マウス/コントローラーのボタンなど)を指定します。ボタン以外のコントローラ属性はサポートされていません。

vkFF のような明示的な仮想キーコードも指定できます。これは、キーに名前がなく、押されたときに目に見える文字を生成しないまれな場合に便利です。仮想キーコードは、キー一覧ページの一番下にある手順に従って決定することができます。

オプション
空白または省略された場合、コマンドは指定されたキーまたはマウス/コントローラーボタンがユーザーによって物理的に離されるまで無期限に待つ。しかし、キーボードフックがインストールされておらず、KeyNameがSendコマンドなどによって人為的に離されたキーである場合、そのキーは物理的に離されたとみなされる。マウスフックがインストールされていない場合、マウスボタンについても同様である。

それ以外の場合は、以下のオプションの1つ以上の文字列を指定する(順番は自由、間に空白を入れることもできる):

D: キーが押し下げられるのを待つ。

L: キーの論理状態をチェックする。これは、OSとアクティブウィンドウがキーがあると信じている状態である(必ずしも物理状態と同じではない)。このオプションはコントローラボタンでは無視される。

T: タイムアウト (例: T3)。キーまたはボタンが指定された状態になった場合、コマンドはタイムアウトが切れるのを待たない。代わりに、直ちにErrorLevelを0に設定し、スクリプトの実行を続行します。

タイムアウト値には2.5のような浮動小数点数を指定できますが、0x03のような16進数値を指定すべきではありません。

ErrorLevel
ErrorLevelには、コマンドがタイムアウトした場合は1が、そうでない場合は0が設定されます。

備考
キーやマウスボタンの物理的な状態は、キーボードフックやマウスフックがインストールされていない限り、論理的な状態と同じになります。スクリプトがフックを使用しているかどうかは、KeyHistoryコマンドまたはメニュー項目で確認できます。スクリプトに#InstallKeybdHookディレクティブと#InstallMouseHookディレクティブを追加することで、どちらか一方または両方のフックを強制的にインストールすることができます。

コマンドが待機状態にある間、ホットキー、カスタムメニュー項目、タイマーによって新しいスレッドを起動できます。

2つ以上のキーが離されるのを待つには、KeyWaitを連続して使用します。例えば

KeyWait Control ; ControlとAltの両方が離されるのを待つ。
キーウェイトAlt
複数のキーのうち、どれか1つのキーが押下されるのを待つには、入力例1を参照のこと。

関連
GetKeyState, Key List, Input, KeyHistory, #InstallKeybdHook, #InstallMouseHook, ClipWait, WinWait


 Aキーが離されるのを待ちます。

キーウェイト、a
 マウスの左ボタンが押し下げられるのを待ちます。

KeyWait, LButton, D
 コントローラの最初のボタンが押下されるまで最大3秒待つ。

KeyWait, Joy1, D T3
 左Altキーが論理的に離されるまで待つ。

キーウェイト、LAlt、L
 このホットキーを押すと、KeyWaitはユーザーが物理的にCapsLockキーを離すのを待ちます。その結果、押したときではなく離したときに後続の文が実行されます。この動作は ~CapsLock up:: に似ています。

~CapsLock::に似ています:
KeyWait, CapsLock ; ユーザーが物理的に離すのを待つ。
MsgBox CapsLockキーを押して離しました。
リターン
 キーまたはマウスボタンをリマップする。(内蔵のリマップ機能を使う方が簡単なので、この例は説明のためだけです)。以下のホットキーでは、NumpadAddが押されている間マウスボタンが押されたままになっており、NumpadAddが効果的にマウスボタンに変換されています。

*NumpadAdd::
MouseClick, left,,, 1, 0, D ; マウスの左ボタンを押したままにする。
KeyWait, NumpadAdd ; キーが離されるまで待つ。
MouseClick, left,,, 1, 0, U ; マウスボタンを離す。
リターン
 キーがダブルクリックされたことを検出する。KeyWaitは、RControlキーを押しながら別のキーを変更するときに、キーボードのオートリピート機能が不要なダブルプレスを発生させないようにするために使用します。KeyWaitはホットキーのスレッドを実行し続け、#MaxThreadsPerHotkeyがデフォルト設定の1であることを確認することでオートリピートをブロックします。シングル、ダブル、トリプルの押下を区別する、より手の込んだスクリプトについては、SetTimerの例#3を参照してください。

~RControl::
if (A_PriorHotkey != "~RControl" または A_TimeSincePriorHotkey > 400)
{
    押下間隔が長すぎるので、これはダブル押しではありません。
    キーウェイト, RControl
    リターン
}
MsgBox 右コントロールキーをダブルクリックしました。
リターン

 

 

 

とか

 

この辺を見てみて

 

やってみたのが

テンキーの9を押したときの動作で

一回押しは9、二回押しはー、長押しはCtrrl&ー

になるようにできました

 

 

#UseHook    ;ホットキーラベルの定義で、常にフックを使用するようにする
;---------------------------
Numpad9::    ;無変換
    KeyWait,Numpad9,T0.1        ;0.3秒対象キーが押されたかどうか
    If(ErrorLevel)
    {
        ;ここに任意のコマンド 長押し
        KeyWait,Numpad9
    Send {Blind}^{NumpadSub}
        Return
    }
    KeyWait,Numpad9,D T0.1    ;0.2秒対象キーが押されるのを待つ
    If(ErrorLevel)
    {
        ;ここに任意のコマンド 1度押し
        KeyWait,Numpad9
    send,{9}
        Return
    }
    ;ここに任意のコマンド 2度押し
    KeyWait,Numpad9
  Send {Blind}{-}
    Return

 

今のキーボードで少し鬼門だったので修正できて何よりです。

 

少し追記、というか修正版

こっちがいい動きをしそうなので覚書として貼っておきます。

 

#UseHook                 ;UseHookをOnにした状態で使用

{
Numpad9::                ;テンキーの9のときの動き
key := "Numpad9"
KeyWait, %key%, T0.2
If(ErrorLevel){          ;長押しした場合
    send,{Blind}^{NumpadSub}
    KeyWait, %key%
    return
}
KeyWait, %key%, D, T0.1
If(!ErrorLevel){         ;2度押しした場合
    send,{Blind}{-}
    KeyWait, %key%
    return
}else{                   ;短押しした場合
    send,{Blind}{%key%}
    KeyWait, %key%
    return
}
return
}

;---------------------------------------
#UseHook                 ;UseHookをOnにした状態で使用

{
Numpad6::                ;テンキーの6のときの動き
key := "Numpad6"
KeyWait, %key%, T0.2
If(ErrorLevel){          ;長押しした場合
    send,{Blind}^{NumpadAdd}
    KeyWait, %key%
    return
}
KeyWait, %key%, D, T0.1
If(!ErrorLevel){         ;2度押しした場合
    send,{Blind}{+}
    KeyWait, %key%
    return
}else{                   ;短押しした場合
    send,{Blind}{%key%}
    KeyWait, %key%
    return
}
return
}

;---------------------------------------
#UseHook                 ;UseHookをOnにした状態で使用

{
Numpad8::                ;テンキーの6のときの動き
key := "Numpad8"
KeyWait, %key%, T0.2
If(ErrorLevel){          ;長押しした場合
    send,{Blind}^{NumpadDiv}
    KeyWait, %key%
    return
}
KeyWait, %key%, D, T0.1
If(!ErrorLevel){         ;2度押しした場合
    send,{Blind}{/}
    KeyWait, %key%
    return
}else{                   ;短押しした場合
    send,{Blind}{%key%}
    KeyWait, %key%
    return
}
return
}

;---------------------------------------
#UseHook                 ;UseHookをOnにした状態で使用

{
Numpad7::                ;テンキーの6のときの動き
key := "Numpad7"
KeyWait, %key%, T0.2
If(ErrorLevel){          ;長押しした場合
    send,{Blind}^{NumpadMult}
    KeyWait, %key%
    return
}
KeyWait, %key%, D, T0.1
If(!ErrorLevel){         ;2度押しした場合
    send,{Blind}{*}
    KeyWait, %key%
    return
}else{                   ;短押しした場合
    send,{Blind}{%key%}
    KeyWait, %key%
    return
}
return
}

;---------------------------------------
#UseHook                 ;UseHookをOnにした状態で使用

{
Numpad0::                ;テンキーの6のときの動き
key := "Numpad0"
KeyWait, %key%, T0.2
If(ErrorLevel){          ;長押しした場合
    send,{Blind}{Enter}
    KeyWait, %key%
    return
}
KeyWait, %key%, D, T0.1
If(!ErrorLevel){         ;2度押しした場合
    send,{Blind}{%key%}
    KeyWait, %key%
    return
}else{                   ;短押しした場合
    send,{Blind}{%key%}
    KeyWait, %key%
    return
}
return
}

 

 

 

ココまで 

 

 

 

 

 

私自身の活動案内

 

    

(ココナラで出品中)

        

 

  

 

この記事の関連商品