; GLOBAL SETTINGS =============================================================================================================== ; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=62989 #Warn #NoEnv #SingleInstance Force SetBatchLines -1 global CPU_CNT := NtQuerySystemInformation().MaxIndex() ; GUI =========================================================================================================================== OnMessage(0x0111, "WM_COMMAND") Gui, Margin, 5, 5 Gui, Font, s12 bold, MS Shell Dlg 2 Gui, Add, Text, xm ym w195 0x201, % "CPU Usages" Gui, Font, s9 normal, MS Shell Dlg 2 Gui, Add, Text, xm y+5 w197 h1 0x10 loop % CPU_CNT { Gui, Add, Text, xm y+5 w80 h22 0x200, % "CPU Core #" A_Index Gui, Add, Edit, x+5 yp w87 h22 0x802 vCPU_CORE_%A_Index% Gui, Add, Text, x+2 yp w20 h22 0x200, % "%" } Gui, Add, Text, xm y+5 w197 h1 0x10 Gui, Add, Text, xm y+5 w80 h22 0x200, % "CPU Overall" Gui, Add, Edit, x+5 yp w87 h22 0x802 vCPU_CORE_ALL Gui, Add, Text, x+2 yp w20 h22 0x200, % "%" Gui, Show, AutoSize, % "CPU Usages" SetTimer, REFRESH, 500 return ; SCRIPT ======================================================================================================================== REFRESH: LOAD := NtQuerySystemInformation() loop % CPU_CNT GuiControl,, CPU_CORE_%A_Index%, % Round(LOAD[A_Index], 2) GuiControl,, CPU_CORE_ALL, % Round(GetSystemTimes(), 2) return ; FUNCTIONS ===================================================================================================================== WM_COMMAND(wParam, lParam) ; by just me { Critical if ((wParam >> 16) = 0x0100) { DllCall("user32.dll\HideCaret", "Ptr", lParam) DllCall("user32.dll\PostMessage", "Ptr", lParam, "UInt", 0x00B1, "Ptr", -1, "Ptr" , 0) } } NtQuerySystemInformation() ; http://msdn.com/library/ms724509(vs.85,en-us) { static hModule := DllCall("LoadLibrary", "Str", "ntdll.dll", "Ptr"), LI := {} static SYSTEM_INFORMATION_CLASS := 0x8 ; SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION size := VarSetCapacity(buf, 0, 0) DllCall("ntdll\NtQuerySystemInformation", "Int", SYSTEM_INFORMATION_CLASS, "Ptr", &buf, "UInt", 0, "UInt*", size) size := VarSetCapacity(buf, size, 0) if (DllCall("ntdll\NtQuerySystemInformation", "Int", SYSTEM_INFORMATION_CLASS, "Ptr", &buf, "UInt", size, "UInt*", 0) != 0) return "*" ErrorLevel CI := {}, Offset := 0, CPU_COUNT := size / 48 loop % CPU_COUNT { CI[A_Index, "IT"] := NumGet(buf, Offset + 0, "UInt64") ; IdleTime CI[A_Index, "KT"] := NumGet(buf, Offset + 8, "UInt64") ; KernelTime CI[A_Index, "UT"] := NumGet(buf, Offset + 16, "UInt64") ; UserTime Offset += 48 } CPU_USAGE := {} loop % CPU_COUNT CPU_USAGE[A_Index] := 100 - (CI[A_Index].IT - LI[A_Index].IT) / (CI[A_Index].KT - LI[A_Index].KT + CI[A_Index].UT - LI[A_Index].UT) * 100 return CPU_USAGE, LI := CI } GetSystemTimes() ; http://msdn.com/library/ms724400(vs.85,en-us) { static LIT := "", LKT := "", LUT := "" CIT := CKT := CUT := "" if !(DllCall("GetSystemTimes", "Int64*", CIT, "Int64*", CKT, "Int64*", CUT)) return "*" A_LastError IDL := CIT - LIT, KER := CKT - LKT, USR := CUT - LUT, SYS := KER + USR return ((SYS - IDL) * 100 / SYS), LIT := CIT, LKT := CKT, LUT := CUT } ; EXIT ========================================================================================================================== GuiClose: GuiEscape: ExitApp
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)