実行中のスクリプトを、編集後の新しいスクリプトに簡単に更新します。これはスクリプトの作成時に有用です。
次の例では、エディタでスクリプトのファイルを上書き保存したときに、自動的にスクリプトがリロードされます。
#IfWinActive, ahk_class Notepad
~^s::
ScriptName := "AutoHotkey.ahk"
IfWinActive, %ScriptName%
{
Reload
}
return
この例では、
^s)であると仮定しているため、実際にはこれらをお使いの環境に合わせる必要があります。
予期せず機能が実行されるような、迷惑なショートカットを無効化します。そのためにはスクリプトとしてreturnだけを記述します。たとえばF1を無効化するには、
F1:: return
とします。しかしただ無効にしただけでは、意図してショートカットを使用したときに何が起きたのかわからなくなることがあります。そのような状況を考慮すると、Beep音を鳴らすようにしておくと、無効化されていることが理解しやすくなります。
F1:: SoundBeep
複数のキーを無効にするには、
F1::
^a::
SoundBeep
return
のようにします。
キー入力時に、そのキー入力をブロックせずに処理をするには、ホットキーの修飾記号を使用して、
~a::
~b::
; 何らかの処理
return
のようにします。しかしこの方法では、処理する前にキーの入力が行われてしまいます。それでは都合が悪いときは、
a::
b::
hotKey := A_ThisHotkey
; 何らかの処理
Send, %hotKey%
return
のように、キー入力をブロックした状態で処理をした後に、キー入力を発生させます。
次のようにすることでShift+ホイールで水平スクロールさせられます。
+WheelDown::WheelRight +WheelUp::WheelLeft
スクロール量を調整するには、Sendで送信する数を指定します。
+WheelDown::Send, {WheelRight 4}
+WheelUp::Send, {WheelLeft 4}
アプリケーションが水平スクロールに対応していない場合は、SendMessageでメッセージを送信します。
WM_HSCROLL := 0x114
SB_LINELEFT := 0
SB_LINERIGHT := 1
+WheelUp::
ControlGetFocus, focusedControl, A
SendMessage, WM_HSCROLL, SB_LINELEFT, 0, %focusedControl%, A
Return
+WheelDown::
ControlGetFocus, focusedControl, A
SendMessage, WM_HSCROLL, SB_LINERIGHT, 0, %focusedControl%, A
Return
0x114 - scroll wheel - Horizontal scrolling shortcut in Windows - Super User
WM_HSCROLL メッセージ (Winuser.h) - Win32 apps | Microsoft Learn
WM_HSCROLLメッセージを用いるときのスクロール量は、0 (SB_LINELEFT) と1 (SB_LINERIGHT) ではスクロール矢印をクロックした量となりますが、2 (SB_PAGELEFT) と 3 (SB_PAGERIGHT) ではスクロールバー シャフト (scroll bar shaft) をクリックした量となります。 スクロール バーについて - Win32 apps | Microsoft Learn WinUser.h
フォーカスのあるウィンドウではなくマウスポインタの位置にあるウィンドウを対象とするには、ControlGetFocusの代わりにMouseGetPosを用います。
MouseGetPos, , , , focusedControl
ダイアログがマウスポインタを中心とした位置に表示されるようにします。次の例では、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
}
}