Process

´ÙÀ½ ¿¬»ê Áß Çϳª¸¦ ÇÁ·Î¼¼½º¿¡ ¼öÇàÇÕ´Ï´Ù: Á¸ÀçÇϴ°¡; ¿ì¼± ¼øÀ§ º¯°æ; ´Ý±â; ´ÝÈ÷±â¸¦ ±â´Ù¸®±â.

Process, Cmd [, PID-or-Name, Param3]

¸Å°³º¯¼ö

Cmd

´ÙÀ½ ´Ü¾î Áß Çϳª:

Exist: ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ Á¸ÀçÇϸé ErrorLevel¿¡ Process ID (PID)¸¦ ¼³Á¤ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é 0ÀÌ ¼³Á¤µË´Ï´Ù. PID-or-Name ¸Å°³º¯¼ö°¡ ºñ¾î ÀÖÀ¸¸é, ±× ½ºÅ©¸³Æ®ÀÇ PID°¡ ¿­¶÷µË´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î ½ºÅ©¸³Æ®ÀÇ PID¸¦ ¿­¶÷ÇÏ´Â ÇÑÁ٠¥¸® ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù: PID := DllCall("GetCurrentProcessId").

Close: ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ ¼º°øÀûÀ¸·Î Á¾·áÇϸé, ErrorLevel¿¡ ±×ÀÇ ÀÌÀü Process ID (PID)°¡ ¼³Á¤µË´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é (ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ ¾ø°Å³ª Á¾·á¿¡ ¹®Á¦°¡ ÀÖ¾úÀ¸¸é), 0ÀÌ ¼³Á¤µË´Ï´Ù. ÇÁ·Î¼¼½º´Â °©ÀÚ±â Á¾·áÇϱ⠶§¹®¿¡ -- ÀÓ°è ÁöÁ¡¿¡¼­ ±×ÀÇ ÀÛ¾÷ÀÌ ÀÎÅÍ·´Æ® µÈ´Ù°Å³ª ±×ÀÇ Ã¢¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÏÁö ¸øÇÏ°í ÀÒ¾î¹ö¸°´Ù°Å³ªÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡ -- ÀÌ ¹æ¹ýÀº ±×ÀÇ Ã¢ Áß¿¡ Çϳª¿¡ WinClose¸¦ »ç¿ëÇؼ­ ÇÁ·Î¼¼½º¸¦ ´ÝÀ» ¼ö ¾øÀ» °æ¿ì¿¡¸¸ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

List: List´Â ¾ÆÁ÷ Áö¿øÇÏÁö ¾ÊÁö¸¸, ¿¹Á¦ ¼½¼Ç¿¡¼­ DllCallÀ» ÅëÇÏ¿© ÇÁ·Î¼¼½º ¸ñ·ÏÀ» ¿­¶÷ÇÏ´Â ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

Param3¿¡ óÀ½ ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½ºÀÇ Priority: ¿ì¼± ¼øÀ§¸¦ (À©µµ¿ìÁîÀÇ ÀÛ¾÷ °ü¸®ÀÚ¿¡ º¸¿©ÁÖ´Â ¼øÀ§) º¯°æÇÏ°í ErrorLevel¿¡ ±×ÀÇ Process ID (PID)¸¦ ¼³Á¤ÇÕ´Ï´Ù. PID-or-Name ¸Å°³º¯¼ö°¡ ºñ¾î ÀÖÀ¸¸é, ½ºÅ©¸³Æ®ÀÇ ÀÚ½ÅÀÇ ¿ì¼± ¼øÀ§°¡ º¯°æµË´Ï´Ù. ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ ¾ø°Å³ª ¿ì¼± ¼øÀ§¸¦ º¯°æÇÏ´Â µ¥ ¹®Á¦°¡ ÀÖ¾úÀ¸¸é, ErrorLevelÀº 0ÀÌ ¼³Á¤µË´Ï´Ù.

Param3Àº ´ÙÀ½ ±âÈ£³ª ´Ü¾îÁß Çϳª°¡ µÇ¾î¾ß ÇÕ´Ï´Ù: L (Low), B (BelowNormal), N (Normal), A (AboveNormal), H (High), R (Realtime). ÁÖÀÇ: ½Ç½Ã°£ ¿ì¼± ¼øÀ§¸¦ °¡Áö°í ½ÇÇàµÇµµ·Ï ¼³°èµÇÁö ¾ÊÀº ÇÁ·Î¼¼½º´Â ½Ã½ºÅÛÀÇ ¾ÈÁ¤¼ºÀ» ÈѼÕÇÒ ¼ö ÀÖ½À´Ï´Ù.

Wait: ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ ³¡³ª±â¸¦ Param3 ÃʱîÁö ±â´Ù¸³´Ï´Ù (¼Ò¼öÁ¡ Æ÷ÇÔ °¡´É). Param3À» »ý·«Çϸé, ¹«ÇÑÁ¤ ±â´Ù¸³´Ï´Ù. ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º¸¦ ¹ß°ßÇϸé, ErrorLevel¿¡ ±×ÀÇ Process ID (PID)°¡ ¼³Á¤µË´Ï´Ù. ¸í·É¾î°¡ ½Ã°£Á¦ÇÑ¿¡ °É¸®¸é, ErrorLevel¿¡ 0ÀÌ ¼³Á¤µË´Ï´Ù.

WaitClose: ºÎÇÕÇÏ´Â ¸ðµç ÇÁ·Î¼¼½º°¡ ´ÝÈú ¶§±îÁö Param3 ÃʱîÁö ±â´Ù¸³´Ï´Ù (¼Ò¼öÁ¡ Æ÷ÇÔ °¡´É). Param3À» »ý·«Çϸé, ¹«ÇÑÁ¤ ±â´Ù¸³´Ï´Ù. ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ ¸ðµÎ ´ÝÈ÷¸é, ErrorLevel¿¡ 0ÀÌ ¼³Á¤µË´Ï´Ù. ¸í·É¾î°¡ ½Ã°£ Á¦ÇÑ¿¡ °É¸®¸é, ErrorLevel¿¡ ¿©ÀüÈ÷ Á¸ÀçÇϴ ù ¹ø° ºÎÇÕ Process ID (PID)°¡ ¼³Á¤µË´Ï´Ù.

PID-or-Name

ÀÌ ¸Å°³º¯¼ö´Â ¾Æ·¡¿¡ ±â¼úÇÏ´Â °Íó·³ ¼ýÀÚ (PID)À̰ųª ÇÁ·Î¼¼½º À̸§ÀÏ ¼ö ÀÖ½À´Ï´Ù. ¶Ç ºñ¿ö µÎ¸é ½ºÅ©¸³Æ® ÀÚüÀÇ ¿ì¼± ¼øÀ§¸¦ º¯°æÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

PID: Process ID´Â ƯÁ¤ÇÑ ÇÁ·Î¼¼½º Çϳª¸¦ À¯ÀÏÇÏ°Ô ½Äº°ÇÏ´Â ¼ýÀÚÀÔ´Ï´Ù (ÀÌ ¼ýÀÚ´Â ±× ÇÁ·Î¼¼½º°¡ »ì¾Æ ÀÖ´Â µ¿¾È¿¡¸¸ À¯È¿ÇÕ´Ï´Ù). »õ·Î ±âµ¿µÈ ÇÁ·Î¼¼½ºÀÇ PID´Â Run ¸í·É¾î¸¦ ÅëÇÏ¿© ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù. ºñ½ÁÇÏ°Ô, âÀÇ PID´Â WinGetÀ¸·Î ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù. Process ¸í·É¾î ÀÚü·Îµµ PID¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù.

Name: ÇÁ·Î¼¼½ºÀÇ À̸§Àº º¸Åë (°æ·Î ¾øÀÌ) ½ÇÇà ÆÄÀÏÀÇ À̸§°ú °°½À´Ï´Ù. ¿¹, notepad.exe ¶Ç´Â winword.exe. À̸§Àº ¿©·¯ ½ÇÇà ÇÁ·Î¼¼½º¿¡ ºÎÇÕÇÒ ¼ö Àֱ⠶§¹®¿¡, ù ¹ø° ÇÁ·Î¼¼½º¿¡¸¸ ÀÛµ¿ÇÕ´Ï´Ù. À̸§Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö ¾Ê½À´Ï´Ù.

Param3

ÀÚ¼¼ÇÑ °ÍÀº À§¿¡¼­ Cmd¸¦ ÂüÁ¶.

ErrorLevel

ÀÚ¼¼ÇÑ °ÍÀº À§¿¡¼­ Cmd¸¦ ÂüÁ¶.

³íÆò

Wait ±×¸®°í WaitClose¿¡ ´ëÇÏ¿©: ÇÁ·Î¼¼½º´Â 100 ¹Ð¸®Ãʸ¶´Ù Á¡°ËµË´Ï´Ù; Á¶°ÇÀÌ ¸¸Á·µÇ´Â ¼ø°£, ¸í·É¾î´Â ±â´Ù¸®±â¸¦ ¸ØÃä´Ï´Ù. ´Ù¸¥ ¸»·Î, ½Ã°£Á¦ÇÑÀÌ °æ°úÇϱ⸦ ±â´Ù¸®Áö ¾Ê°í, Áï½Ã ErrorLevel¿¡ À§¿¡ ±â¼úÇÑ ´ë·Î ¼³Á¤ÇÑ ´ÙÀ½, °è¼ÓÇؼ­ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÕ´Ï´Ù. ¶ÇÇÑ, ¸í·É¾î°¡ ´ë±â »óÅ¿¡ ÀÖÀº µ¿¾È¿¡, ÇÖÅ°, ¸ÂÃã ¸Þ´º Ç׸ñ, ¶Ç´Â ŸÀ̸Ӹ¦ ÅëÇÏ¿© »õ ¾²·¹µå¸¦ ±âµ¿ÇÒ ¼ö ÀÖ½À´Ï´Ù.

°ü·Ã Ç׸ñ

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

¿¹Á¦

; ¿¹Á¦ #1:

Run Notepad.exe, , , NewPID
Process, priority, %NewPID%, High
MsgBox »õ·Î ±âµ¿µÈ ³ëÆ®ÆеåÀÇ PID´Â %NewPID%ÀÔ´Ï´Ù.

 

; ¿¹Á¦ #2:

Process, wait, Notepad.exe, 5.5
NewPID = %ErrorLevel%  ; ErrorLevelÀÌ ÀÚÁÖ ¹Ù²î±â ¶§¹®¿¡ °ªÀ» Áï½Ã ÀúÀåÇÕ´Ï´Ù.
if NewPID = 0
{
    MsgBox ÁöÁ¤ÇÑ ÇÁ·Î¼¼½º°¡ 5.5 ÃÊ À̳»¿¡ ³ªÅ¸³ªÁö ¾Ê¾Ò½À´Ï´Ù.
    return
}
; ±×·¸Áö ¾ÊÀ¸¸é:
MsgBox ºÎÇÕÇÏ´Â ÇÁ·Î¼¼½º°¡ ³ªÅ¸³µ½À´Ï´Ù (ÇÁ·Î¼¼½º ID´Â %NewPID%ÀÔ´Ï´Ù).
Process, priority, %NewPID%, Low
Process, priority, , High  ; ½ºÅ©¸³Æ® ÀÚü¿¡ ³ôÀº ¼øÀ§¸¦ ¼³Á¤ÇÕ´Ï´Ù.
WinClose Untitled - Notepad
Process, WaitClose, %NewPID%, 5
if ErrorLevel ; ÇØ´ç PID°¡ ¿©ÀüÈ÷ Á¸ÀçÇÕ´Ï´Ù.
    MsgBox ÇÁ·Î¼¼½º°¡ 5 ÃÊ À̳»¿¡ ´ÝÈ÷Áö ¾Ê¾Ò½À´Ï´Ù.

 

; ¿¹Á¦ #3: È°¼º âÀÇ ÇÁ·Î¼¼½º ¿ì¼±¼øÀ§¸¦ º¯°æÇÒ ÇÖÅ°:

#z:: ; Win+Z ÇÖÅ°
WinGet, active_pid, PID, A
WinGetTitle, active_title, A
Gui, 5:Add, Text,, Ãë¼ÒÇÏ·Á¸é ESCAPE¸¦ ´©¸£°Å³ª, ´ÙÀ½ â¿¡ ´ëÇÏ¿© »õ ¿ì¼±¼øÀ§¸¦`n´õºí Ŭ¸¯ÇϽʽÿÀ:`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_GuiEvent <> DoubleClick
    return
; ±×·¸Áö ¾ÊÀ¸¸é ´ÙÀ½ ¶óº§·Î °©´Ï´Ù:
5ButtonOK:
GuiControlGet, MyListBox
Gui, Destroy
Process, Priority, %active_pid%, %MyListBox%
if ErrorLevel
    MsgBox ¼º°ø:  "%MyListBox%"¿¡ ¿ì¼±¼øÀ§°¡¹Ù²î¾ú½À´Ï´Ù.
else
    MsgBox ¿¡·¯: "%MyListBox%"¿¡ ¿ì¼± ¼øÀ§¸¦ ¹Ù²ÙÁö ¸øÇß½À´Ï´Ù.
return

 

; ¿¹Á¦ #4: DllCallÀ» ÅëÇÏ¿© ½ÇÇà ÇÁ·Î¼¼½º ¸ñ·ÏÀ» ¿­¶÷ÇÏ°í ±× ¸ñ·ÏÀ» MsgBox¿¡ º¸¿©ÁÝ´Ï´Ù.

d := "  |  "  ; ¹®ÀÚ¿­ °¡¸§ÀÚ
s := 4096  ; ¹öÆÛ¿Í ¹è¿­ÀÇ Å©±â (4 KB)

Process, Exist  ; ErrorLevel¿¡ ½ÇÇàÁßÀÎ ½ºÅ©¸³Æ®ÀÇ PID¸¦ ¼³Á¤ÇÕ´Ï´Ù
; PROCESS_QUERY_INFORMATION (0x0400)·Î ÀÌ ½ºÅ©¸³Æ®ÀÇ ÇÚµéÀ» ¾ò½À´Ï´Ù
h := DllCall("OpenProcess", "UInt", 0x0400, "Int", false, "UInt", ErrorLevel, "Ptr")
; ´ÙÀ½ ÇÁ·Î¼¼½º·Î Á¶Àý°¡´ÉÇÑ Á¢±Ù ÅäÅ«À» ¿±´Ï´Ù (TOKEN_ADJUST_PRIVILEGES = 32)
DllCall("Advapi32.dll\OpenProcessToken", "Ptr", h, "UInt", 32, "PtrP", t)
VarSetCapacity(ti, 16, 0)  ; Ư±Ç ±¸Á¶Ã¼
NumPut(1, ti, 0, "UInt")  ; Ư±Ç ¹è¿­¿¡ ÀÖ´Â ÇÑ ¿£Æ®¸®...
; µð¹ö±× Ư±ÇÀÇ Áö¿ªÀûÀ¸·Î À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ ¿­¶÷ÇÕ´Ï´Ù:
DllCall("Advapi32.dll\LookupPrivilegeValue", "Ptr", 0, "Str", "SeDebugPrivilege", "Int64P", luid)
NumPut(luid, ti, 4, "Int64")
NumPut(2, ti, 12, "UInt")  ; ´ÙÀ½ Ư±ÇÀ» È°¼º È­ÇÕ´Ï´Ù: SE_PRIVILEGE_ENABLED = 2
; ÀÌ ÇÁ·Î¼¼½ºÀÇ Æ¯±ÇÀ» »õ Á¢±Ù ÅäÅ«À¸·Î ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù:
r := DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", t, "Int", false, "Ptr", &ti, "UInt", 0, "Ptr", 0, "Ptr", 0)
DllCall("CloseHandle", "Ptr", t)  ; ÀÌ Á¢±Ù ÅäÅ« ÇÚµéÀ» ´Ý¾Æ¼­ ¸Þ¸ð¸®¸¦ Àý¾àÇÕ´Ï´Ù
DllCall("CloseHandle", "Ptr", h)  ; ÀÌ ÇÁ·Î¼¼½º ÇÚµéÀ» ´Ý¾Æ¼­ ¸Þ¸ð¸®¸¦ Àý¾àÇÕ´Ï´Ù

hModule := DllCall("LoadLibrary", "Str", "Psapi.dll")  ; ¶óÀ̺귯¸®¸¦ ¹Ì¸® ÀûÀçÇØ ¼öÇ༺´ÉÀ» ³ôÀÌ´Ï´Ù.
s := VarSetCapacity(a, s)  ; ÇÁ·Î¼¼½º ½Äº°ÀÚÀÇ ¸ñ·ÏÀ» ¹ÞÀ» ¹è¿­:
c := 0  ; ÇÁ·Î¼¼½º ½Äº°ÀÚ¸¦ À§ÇÑ Ä«¿îÅÍ
DllCall("Psapi.dll\EnumProcesses", "Ptr", &a, "UInt", s, "UIntP", r)
Loop, % r // 4  ; ½Äº°ÀÚ¸¦ À§ÇÏ¿© ¹è¿­À» DWORD (32 ºñÆ®)·Î ºÐÇØÇÕ´Ï´Ù:
{
   id := NumGet(a, A_Index * 4, "UInt")
   ; ´ÙÀ½À¸·Î ÇÁ·Î¼¼½º¸¦ ¿±´Ï´Ù: PROCESS_VM_READ (0x0010) | PROCESS_QUERY_INFORMATION (0x0400)
   h := DllCall("OpenProcess", "UInt", 0x0010 | 0x0400, "Int", false, "UInt", id, "Ptr")
   if !h
      continue
   VarSetCapacity(n, s, 0)  ; ¸ðµâÀÇ ±âº» À̸§À» ¹ÞÀ» ¹öÆÛ:
   e := DllCall("Psapi.dll\GetModuleBaseName", "Ptr", h, "Ptr", 0, "Str", n, "UInt", A_IsUnicode ? s//2 : s)
   if !e    ; 32-ºñÆ® ¸ðµåÀÏ ¶§ 64-ºñÆ® ÇÁ·Î¼¼½º¸¦ À§ÇÑ ´ëºñ ¹æ¹ý:
      if e := DllCall("Psapi.dll\GetProcessImageFileName", "Ptr", h, "Str", n, "UInt", A_IsUnicode ? s//2 : s)
         SplitPath n, n
   DllCall("CloseHandle", "Ptr", h)  ; ÇÁ·Î¼¼½º ÇÚµéÀ» ´Ý¾Æ ¸Þ¸ð¸®¸¦ Àý¾àÇÕ´Ï´Ù
   if (n && e)  ; À̹ÌÁö°¡ ³ÎÀÌ ¾Æ´Ï¸é ¸ñ·Ï¿¡ Ãß°¡ÇÕ´Ï´Ù:
      l .= n . d, c++
}
DllCall("FreeLibrary", "Ptr", hModule)  ; ¶óÀ̺귯¸®¸¦ ³»·Á¼­ ¸Þ¸ð¸®¸¦ Ç®¾îÁÝ´Ï´Ù
;Sort, l, C  ; ÀÌ ÁÙÀ» ÁÖ¼® ÇØÁ¦ÇÏ¸é ¸®½ºÆ®¸¦ ¾ËÆĺª ¼ø¼­·Î ¸®½ºÆ®¸¦ Á¤·ÄÇÒ ¼ö ÀÖ½À´Ï´Ù
MsgBox, 0, %c% Processes, %l%

 

; ¿¹Á¦ #5: COMÀ» ÅëÇÏ¿© ÇöÀç ½ÇÇà ÁßÀÎ ÇÁ·Î¼¼½º ¸ñ·ÏÀ» ¿­¶÷ÇÕ´Ï´Ù.

Gui, 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)
Gui, Show,, Process List

; Win32_Process: http://msdn.microsoft.com/en-us/library/aa394372.aspx