本帖最后由 smooth 于 2015-6-10 18:54 编辑
ProcessList()
_WinAPI_GetProcessFileName()
afan 发表于 2015-6-10 17:24
这是没办法找到我要结束的那个进程的。
下面的代码能够列出所有的进程及对应的路径,可是依然无法定位我要删除的进程,因为没有列出对应的PID号。只有根据路径及对应的PID(PID应该是唯一的,不重复的),才能准确删除进程。
#RequireAdmin
#Include <APIConstants.au3>
#Include <Array.au3>
#Include <WinAPIEx.au3>
;Opt('MustDeclareVars', 1)
Global $hToken, $aAdjust, $aList = 0
; 为获取对其他进程的完全访问权限而启用 "SeDebugPrivilege" 特权
$hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
_WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
; 为系统上所有进程获取工作目录
If Not (@error Or @extended) Then
$aList = ProcessList()
For $i = 1 To $aList[0][0]
$aList[$i][1] = _WinAPI_GetProcessWorkingDirectory($aList[$i][1])
Next
EndIf
; 默认情况下启用 SeDebugPrivilege 特权
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)
_ArrayDisplay($aList, '_WinAPI_GetProcessCommandLine')
|