スクリプト例

スクリプトの自動リロード

実行中のスクリプトを、編集後の新しいスクリプトに簡単に更新します。これはスクリプトの作成時に有用です。

次の例では、エディタでスクリプトのファイルを上書き保存したときに、自動的にスクリプトがリロードされます。

#IfWinActive, ahk_class Notepad

~^s::
    ScriptName := "AutoHotkey.ahk"
    IfWinActive, %ScriptName%
    {
        Reload
    }
return

この例では、

  • エディタは、メモ帳 (ahk_class Notepad)
  • エディタの上書き保存のショートカットは、Ctrl + s (^s)
  • スクリプトのファイル名は、"AutoHotkey.ahk"

であると仮定しているため、実際にはこれらをお使いの環境に合わせる必要があります。

ショートカット無効化

予期せず機能が実行されるような、迷惑なショートカットを無効化します。そのためにはスクリプトとしてreturnだけを記述します。たとえばF1を無効化するには、

F1:: return

とします。しかしただ無効にしただけでは、意図してショートカットを使用したときに何が起きたのかわからなくなることがあります。そのような状況を考慮すると、Beep音を鳴らすようにしておくと、無効化されていることが理解しやすくなります。

F1:: SoundBeep

複数のキーを無効にするには、

F1::
^a::
    SoundBeep
return

のようにします。

キー入力の修正

キー入力時に、そのキー入力をブロックせずに処理をするには、ホットキーの修飾記号を使用して、

~a::
~b::
    ; 何らかの処理
return

のようにします。しかしこの方法では、処理する前にキーの入力が行われてしまいます。それでは都合が悪いときは、

a::
b::
    hotKey := A_ThisHotkey

    ; 何らかの処理

    Send, %hotKey%
return

のように、キー入力をブロックした状態で処理をした後に、キー入力を発生させます。

ダイアログの表示時にマウスポインタの位置へ移動

ダイアログがマウスポインタを中心とした位置に表示されるようにします。次の例では、Ctrl + Fで検索ダイアログが表示される場合を想定しています。

~^f::
    WinWait, 検索 ahk_class #32770, , 0.5
    if( ErrorLevel == 0 )
    {
        CoordMode, Mouse, Screen
        MouseGetPos, x, y

        WinGetPos, , , width, height, ahk_class #32770
        WinMove, 検索 ahk_class #32770, , x - width / 2, y - height / 2
    }
return

ダイアログを自動で閉じる

特定のスクリプトの実行時に表示されるダイアログならば、そのスクリプト内でIfWinExistによりウィンドウを検出して、それを閉じます。たとえばESCで閉じられるならば、次のようにします。

; ダイアログを表示させるような処理

IfWinExist, ahk_class #32770
{
    ControlSend, , {ESC}, ahk_class #32770
}

スクリプトの実行と関係なく表示されるダイアログならば、スクリプトをSetTimerで定期実行し、そこでウィンドウの存在を確認して閉じるようにします。

SetTimer, Task, 500

Task:
    IfWinExist, SAMPLE
    {
        ControlClick, X100 Y50, SAMPLE
    }
return

この例では、SAMPLEというタイトルを持つウィンドウが表示されたら、そのウィンドウの座標 (100,50) の位置が自動でクリックされます。

アクティブウィンドウのテキストをファイルに保存

アクティブなウィンドウのテキストを、指定ファイルに追記保存します。

SaveActiveWindowText( filepath )
{
    WinGetText, text, A
    FileAppend, %text%, %filePath%
}

選択されているテキストを指定パターンで置換

選択されているテキストをクリップボードにコピーし、それを置換して貼り付けます。

Replace( pattern, replacement )
{
    clipboard =
    Send, ^c

    ClipWait, 0.1
    if( ErrorLevel == 0 && StrLen( clipboard ) != 0 )
    {
        str := clipboard
        str := RegExReplace( str, %pattern%, %replacement% )

        clipboard := str
        Send, ^v
    }
}

参考