Functions for retrieving information about a process or for performing various operations on a process. 関数の名称をクリックすると詳細が表示されます。
| 関数 | 説明 |
|---|---|
| ProcessClose | 最初にマッチングしたプロセスを強制的に終了させます。 |
| ProcessExist | 指定されたプロセスが存在するかどうかをチェックします。 |
| ProcessGetName | 指定されたプロセスの名前を返します。 |
| ProcessGetParent | 指定されたプロセスを作成したプロセスのプロセスID(PID)を返します。 |
| ProcessGetPath | 指定されたプロセスのパスを返します。 |
| ProcessSetPriority | 最初のマッチング処理の優先度を変更します。 |
| ProcessWait | 指定されたプロセスが存在するのを待ちます。 |
| ProcessWaitClose | すべてのマッチング処理が終了するのを待ちます。 |
プロセスリスト:ProcessList関数はありませんが、例1、例2は DllCallやCOMでプロセスのリストを取得する方法を示しています。
Run、WinClose、WinKill、WinWait、WinWaitClose、WinExist、Win関数
Shows a list of running processes retrieved via DllCall.
d := " | " ; string separator
s := 4096 ; size of buffers and arrays (4 KB)
ScriptPID := ProcessExist() ; The PID of this running script.
; Get the handle of this script with PROCESS_QUERY_INFORMATION (0x0400):
h := DllCall("OpenProcess", "UInt", 0x0400, "Int", false, "UInt", ScriptPID, "Ptr")
; Open an adjustable access token with this process (TOKEN_ADJUST_PRIVILEGES = 32):
DllCall("Advapi32.dll\OpenProcessToken", "Ptr", h, "UInt", 32, "PtrP", &t := 0)
; Retrieve the locally unique identifier of the debug privilege:
DllCall("Advapi32.dll\LookupPrivilegeValue", "Ptr", 0, "Str", "SeDebugPrivilege", "Int64P", &luid := 0)
ti := Buffer(16, 0) ; structure of privileges
NumPut( "UInt", 1 ; one entry in the privileges array...
, "Int64", luid
, "UInt", 2 ; Enable this privilege: SE_PRIVILEGE_ENABLED = 2
, ti)
; Update the privileges of this process with the new access token:
r := DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", t, "Int", false, "Ptr", ti, "UInt", 0, "Ptr", 0, "Ptr", 0)
DllCall("CloseHandle", "Ptr", t) ; Close the access token handle to save memory.
DllCall("CloseHandle", "Ptr", h) ; Close the process handle to save memory.
hModule := DllCall("LoadLibrary", "Str", "Psapi.dll") ; Increase performance by preloading the library.
a := Buffer(s) ; An array that receives the list of process identifiers:
c := 0 ; counter for process idendifiers
l := ""
DllCall("Psapi.dll\EnumProcesses", "Ptr", a, "UInt", s, "UIntP", &r)
Loop r // 4 ; Parse array for identifiers as DWORDs (32 bits):
{
id := NumGet(a, A_Index * 4, "UInt")
; Open process with: PROCESS_VM_READ (0x0010) | PROCESS_QUERY_INFORMATION (0x0400)
h := DllCall("OpenProcess", "UInt", 0x0010 | 0x0400, "Int", false, "UInt", id, "Ptr")
if !h
continue
n := Buffer(s, 0) ; A buffer that receives the base name of the module:
e := DllCall("Psapi.dll\GetModuleBaseName", "Ptr", h, "Ptr", 0, "Ptr", n, "UInt", s//2)
if !e ; Fall-back method for 64-bit processes when in 32-bit mode:
e := DllCall("Psapi.dll\GetProcessImageFileName", "Ptr", h, "Ptr", n, "UInt", s//2)
SplitPath StrGet(n), &n
DllCall("CloseHandle", "Ptr", h) ; Close the process handle to save memory.
if (n && e) ; If image is not null add to list:
l .= n "`n", c++
}
DllCall("FreeLibrary", "Ptr", hModule) ; Unload the library to free memory.
;l := Sort(l) ; Uncomment this line to sort the list alphabetically.
MsgBox StrReplace(l, "`n", d), c " Processes", 0
Shows a list of running processes retrieved via COM and Win32_Process.
MyGui := Gui(, "Process List")
LV := MyGui.Add("ListView", "x2 y0 w400 h500", ["Process Name","Command Line"])
for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
LV.Add("", process.Name, process.CommandLine)
MyGui.Show