#NoEnv #SingleInstance Force SetBatchLines -1 ; https://autohotkey.com/boards/viewtopic.php?t=9556 ; http://ahkscript.org/boards/viewtopic.php?f=5&t=3443 ProcessPrivilege(DllCall("Kernel32.dll\GetCurrentProcessId"), "SeDebugPrivilege") Gui, Add, ListView, x0 y0 w615 h320 Sort vLst gLst +AltSubmit, PID|Name|PrivateUsage|WorkingSetSize ;Gui, Add, ListView, x0 y0 w615 h320 Sort, PID|Name|PrivateUsage|WorkingSetSize ;Gui, Add, ListView, x0 y0 w615 h320 Sort vLst gLst +AltSubmit, ProcessPID|ProcessName|PrivateUsage|WorkingSetSize GuiControl, -Redraw, SysListView321 ;GoSub, LoadProcessList ;Gui, 1: Show, Autosize, ProcessList IL_Destroy(ImageList) , ImageList := IL_Create() , LV_Delete() , LV_SetImageList(ImageList) for k, v in ProcessEnum() { if !(IL_Add(ImageList, ProcessPath(k))) IL_Add(ImageList, A_WinDir "\explorer.exe") LV_Add("Icon" A_Index, k, v, FormatNumComma((i:=ProcessMemoryInfo(k)).PrivateUsage/1024) " KB" , FormatNumComma(i.WorkingSetSize/1024) "KB") } LV_ModifyCol(1, "AutoHdr"), LV_ModifyCol(2, "AutoHdr") GuiControl, +Redraw, SysListView321 Gui, Show, w618 h323, AHK Task Manager SetTimer, Update, 2000 return GuiEscape: GuiClose: ExitApp return Lst: If (A_GuiEvent = "DoubleClick") { LV_GetText(xPid, A_EventInfo, 1) LV_GetText(xNam, A_EventInfo, 2) MsgBox % "Pid`t" xpid "`nName`t" xNam } If (A_GuiEvent = "RightClick") { LV_GetText(xPid, A_EventInfo, 1) LV_GetText(xNam, A_EventInfo, 2) MsgBox, 36, , Pid: %xPid%`nName: %xNam%`n`nEnd process? IfMsgBox, Yes { If (SafeProcessKill(xPid)) { MsgBox, 64, , Process successfully ended! Reload ; Added } Else MsgBox, 48, , Failure: Could not end the process! } } Return SafeProcessKill(p) { WinClose,ahk_pid %p% WinWaitClose, ahk_pid %p%, , 1 If (ErrorLevel) ; Force kill { MsgBox, 36, , Process refuses to close.`nForce kill? IfMsgBox, No Return 0 Process, Close, %p% Return ErrorLevel } Return 1 } LoadProcessList: GuiControl, -Redraw, Lst LV_Delete() For Process in ComObjGet("WinMgmts:").ExecQuery("Select * from Win32_Process") { LV_Add("", Process.Name, Process.ProcessID) } LV_ModifyCol() LV_ModifyCol(2, "50 Integer") GuiControl, +Redraw, Lst Return Update: SetTimer,, Off Loop, % LV_GetCount() { LV_GetText(PID, A_Index, 1) LV_Modify(A_Index,,,, FormatNumComma((i:=ProcessMemoryInfo(PID)).PrivateUsage/1024) " KB" , FormatNumComma(i.WorkingSetSize/1024) "KB") } SetTimer,, On return ProcessEnum() { dwSize := VarSetCapacity(lppe, A_PtrSize=4?296:304, 0), NumPut(dwSize, lppe, 0, "UInt") , hSnapshot := DLLCall("Kernel32.dll\CreateToolhelp32Snapshot", "UInt", 0x00000002, "UInt", 0) , DllCall("Kernel32.dll\Process32First", "Ptr", hSnapshot, "Ptr", &lppe), List := [],r:=hSnapshot?0:1 Loop List[NumGet(lppe, 8, "UInt")] := StrGet(&lppe+(A_PtrSize=4?36:44), 260, "CP0") until !(DllCall("Kernel32.dll\Process32Next", "Ptr", hSnapshot, "UInt", &lppe)) return List, DllCall("Kernel32.dll\CloseHandle", "Ptr", hSnapshot), ErrorLevel := r } ProcessMemoryInfo(ProcessName) { ProcessId := InStr(ProcessName, ".")?ProcessExist(ProcessName):ProcessName , hProcess := DllCall("Kernel32.dll\OpenProcess", "UInt", 0x0010|0x0400, "UInt", 0, "UInt", ProcessId) , nSize := VarSetCapacity(memCounters, A_PtrSize = 8 ? 72 : 40), NumPut(nSize, memCounters) if !(DllCall("Psapi.dll\GetProcessMemoryInfo", "Ptr", hProcess, "UInt", &memCounters, "UInt", nSize)) { memCounters := "", nSize := VarSetCapacity(memCounters, A_PtrSize = 8 ? 80 : 44), NumPut(nSize, memCounters) if !(DllCall("Kernel32.dll\K32GetProcessMemoryInfo", "Ptr", hProcess, "UInt", &memCounters, "UInt", nSize)) return false, ErrorLevel := true } i := {}, i.PageFaultCount := NumGet(memCounters, 4, "UInt") , i.PeakWorkingSetSize := NumGet(memCounters, 8, "Ptr") , i.WorkingSetSize := NumGet(memCounters, A_PtrSize = 8 ? 16 : 12, "Ptr") , i.QuotaPeakPagedPoolUsage := NumGet(memCounters, A_PtrSize = 8 ? 24 : 16, "Ptr") , i.QuotaPagedPoolUsage := NumGet(memCounters, A_PtrSize = 8 ? 32 : 20, "Ptr") , i.QuotaPeakNonPagedPoolUsage := NumGet( memCounters, A_PtrSize = 8 ? 40 : 24, "Ptr") , i.QuotaNonPagedPoolUsage := NumGet( memCounters, A_PtrSize = 8 ? 48 : 28, "Ptr") , i.PagefileUsage := NumGet( memCounters, A_PtrSize = 8 ? 56 : 32, "Ptr") , i.PeakPagefileUsage := NumGet( memCounters, A_PtrSize = 8 ? 64 : 36, "Ptr") , i.PrivateUsage := NumGet(memCounters, A_PtrSize = 8 ? 72 : 40, "Ptr") return i, DllCall("kernel32.dll\CloseHandle", "Ptr", hProcess), ErrorLevel := false } ProcessExist(ProcessName) { Process, Exist, %ProcessName% return ErrorLevel } ProcessPath(ProcessName) { ProcessId := InStr(ProcessName, ".")?ProcessExist(ProcessName):ProcessName , hProcess := DllCall("Kernel32.dll\OpenProcess", "UInt", 0x0400|0x0010, "UInt", 0, "UInt", ProcessId) , FileNameSize := VarSetCapacity(ModuleFileName, (260 + 1) * 2, 0) / 2 if !(DllCall("Psapi.dll\GetModuleFileNameExW", "Ptr", hProcess, "Ptr", 0, "Str", ModuleFileName, "UInt", FileNameSize)) if !(DllCall("Kernel32.dll\K32GetModuleFileNameExW", "Ptr", hProcess, "Ptr", 0, "Str", ModuleFileName, "UInt", FileNameSize)) DllCall("Kernel32.dll\QueryFullProcessImageNameW", "Ptr", hProcess, "UInt", 1, "Str", ModuleFileName, "UIntP", FileNameSize) return ModuleFileName, DllCall("Kernel32.dll\CloseHandle", "Ptr", hProcess) } FormatNumComma(lpValue, Locale := 0x0400) { Locale := Locale="."?0x0456:Locale=","?0x0409:!Locale?0x0400:Locale if !(cchNumber := DllCall("kernel32.dll\GetNumberFormatEx", "UInt", Locale, "UInt", 0, "Str", lpValue, "Ptr", 0, "Ptr", 0, "Int", 0)) cchNumber := DllCall("kernel32.dll\GetNumberFormatW", "UInt", Locale, "UInt", 0, "Str", lpValue, "Ptr", 0, "Ptr", 0, "Int", 0) VarSetCapacity(lpNumberStr, cchNumber * 2) if !DllCall("kernel32.dll\GetNumberFormatEx", "UInt", Locale, "UInt", 0, "Str", lpValue, "Ptr", 0, "Str", lpNumberStr, "Int", cchNumber) DllCall("kernel32.dll\GetNumberFormatW", "UInt", Locale, "UInt", 0, "Str", lpValue, "Ptr", 0, "Str", lpNumberStr, "Int", cchNumber) return SubStr(lpNumberStr, 1, StrLen(lpNumberStr) - 3) } ProcessPrivilege(ProcessName, Privileges) { ProcessId := InStr(ProcessName, ".")?ProcessExist(ProcessName):ProcessName , hProcess := DllCall("Kernel32.dll\OpenProcess", "UInt", 0x0400, "UInt", 0, "UInt", ProcessId) , DllCall("Advapi32.dll\OpenProcessToken", "Ptr", hProcess, "UInt", 0x0020|0x00000008, "UIntP", hToken) , PrivilegesLuid := [], i := 0 Loop, Parse, % Privileges, `, DllCall("Advapi32.dll\LookupPrivilegeValueW", "Ptr", 0, "Str", A_LoopField, "Int64P", lpLuid) , PrivilegesLuid[A_Index] := lpLuid for k, v in PrivilegesLuid ti := "", VarSetCapacity(ti, 16, 0), NumPut(1, ti, 0, "UInt"), NumPut(v, ti, 4, "Int64"), NumPut(2, ti, 12, "UInt") , i := i+(DllCall("Advapi32.dll\AdjustTokenPrivileges", "Ptr", hToken, "Int", false, "Ptr", &ti, "UInt", 0, "Ptr", 0, "Ptr", 0)?1:0) DllCall("kernel32.dll\CloseHandle", "Ptr", hToken), DllCall("kernel32.dll\CloseHandle", "Ptr", hProcess) return i, ErrorLevel := PrivilegesLuid.MaxIndex()!=i }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)