Process

特定のプロセスが存在するかチェックしたり、優先度を変更したり、終了させたりする

Process, Exist, PID-or-Name
Process, Close, PID-or-Name
Process, Priority, PID-or-Name, NewPriority
Process, Wait, PID-or-Name, Seconds
Process, WaitClose, PID-or-Name, Seconds

Parameters

引数名説明
Cmd

以下のコマンド名のどれかを指定

Exist
PID-or-Nameで指定したプロセスが存在すれば、ErrorLevel にPIDが格納される。
PID-or-Nameが省略された場合は、スクリプト自身のPIDが格納される。
Close
プロセスを強制終了する。
Priority
プロセスの優先度を変更する。
第2引数を省略することで、AutoHotkey自身のプロセス優先度を変更できる。
第3引数に設定したい優先度を指定する。
優先度は以下のどれか。頭文字一文字の省略形でもよい。
  • Realtime
  • High
  • AboveNormal
  • Normal
  • BelowNormal
  • Low
Wait
第3引き数で指定した秒数(小数も可能)まで、一致するプロセスが存在するようになるのを待つ。
第3引き数が省略された場合、プロセスが存在するようになるまで無限に待つ。
プロセスが見つかった場合は、ErrorLevel にPIDが格納される。
指定時間が経過した場合は、「0」になる。
WaitClose
第3引き数で指定した秒数(小数も可能)まで、一致するプロセスが一つも存在しなくなるのを待つ。
第3引き数が省略された場合、プロセスが存在するようになるまで無限に待つ。
指定時間が経過しても一致するプロセスが残っていた場合、ErrorLevelに一致する最初のプロセスのPIDが入る。
プロセスが存在しなくなった場合、ErrorLevelは「0」になる。
PID-or-Name プロセスIDかプロセス名を指定する。
プロセスID
プロセス起動時に割り振られる固有の番号。
RunWinGet、Processコマンドで取得できる。
プロセス名
多くの場合、プロセス名は実行ファイル名と同じになる。
複数の名前が一致するプロセスがあった場合、最初の一つが対象となる。

ErrorLevel

PID-or-Nameにマッチするプロセスが見つかり、処理に成功した場合は、そのプロセスのPIDになる。
プロセスが見つからなかったり、処理に失敗した場合は、「0」になる。
コマンドがWaitCloseの場合のみ、指定時間が経過しても一致するプロセスが残っていた場合そのプロセスのPIDになり、プロセスが存在しなくなった場合、「0」になる。

Remarks

WaitとWaitCloseは、100ミリ秒ごとに指定プロセスの存在をチェックする。
条件を満たしたら即座に待機を終了し、ErrorLevelを変更し、スクリプトの次の行の実行に移る。
待機している間は、他のスレッドが割り込むことができる。

WindowsNT4.0でこのコマンドを実行するには、PSAPI.DLL(AutoHotkeyに同梱)が必要。

Related

Run, WinGet, WinClose, WinKill, WinWait, WinWaitClose, IfWinExist

Example(s)

; Example #1:
Run Notepad.exe, , , NewPID
Process, priority, %NewPID%, High
MsgBox The newly launched notepad's PID is %NewPID%.
; Example #2:
Process, wait, Notepad.exe, 5.5
NewPID = %ErrorLevel%  ; Save the value immediately since ErrorLevel is often changed.
if NewPID = 0
{
	MsgBox The specified process did not appear within 5.5 seconds.
	return
}
; Otherwise:
MsgBox A matching process has appeared (Process ID is %NewPID%).
Process, priority, %NewPID%, Low
Process, priority, , High  ; Have the script set itself to high priority.
WinClose Untitled - Notepad
Process, WaitClose, %NewPID%, 5
if ErrorLevel <> 0 ; The PID still exists.
	MsgBox The process did not close within 5 seconds.

; Example #3: A hotkey to change the priority of the active window's process:
#z:: ; Win+Z hotkey
WinGet, active_pid, PID, A
WinGetTitle, active_title, A
Gui, 5:Add, Text,, Press ESCAPE to cancel, or double-click a new`npriority level for the following window:`n%active_title%
Gui, 5:Add, ListBox, vMyListBox gMyListBox r5, Normal|High|Low|BelowNormal|AboveNormal
Gui, 5:Add, Button, default, OK
Gui, 5:Show,, Set Priority
return

5GuiEscape:
5GuiClose:
Gui, Destroy
return

MyListBox:
if A_GuiControlEvent <> DoubleClick
	return
; else fall through to the next label:
5ButtonOK:
GuiControlGet, MyListBox
Gui, Destroy
Process, Priority, %active_pid%, %MyListBox%
if ErrorLevel = 0
	MsgBox Error: Its priority could not be changed to "%MyListBox%".
else
	MsgBox Success: Its priority was changed to "%MyListBox%".
return