2012-09-30 17:52:06 +00:00
/*
2016-03-09 18:34:57 +00:00
bug . n - - tiling window management
2019-04-07 19:11:56 +00:00
Copyright ( c ) 2010 - 2019 Joshua Fuhs , joten
2016-03-09 18:34:57 +00:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
@license GNU General Public License version 3
. . / LICENSE . md or < http : / / www . gnu . org / licenses / >
2019-04-07 19:28:37 +00:00
@version 9.1 . 0
2012-09-30 17:52:06 +00:00
* /
2014-03-04 19:53:33 +00:00
ResourceMonitor_init ( ) {
Global Config_readinDiskLoad , Config_readinNetworkLoad , ResourceMonitor_hDrive
If Config_readinDiskLoad
ResourceMonitor_hDrive := DllCall ( " CreateFile " , " Str " , " \\.\PhysicalDrive0 " , " UInt " , 0 , " UInt " , 3 , " UInt " , 0 , " UInt " , 3 , " UInt " , 0 , " UInt " , 0 )
;; This call may lead to bug.n hanging (bug 019005).
If Config_readinNetworkLoad
ResourceMonitor_getNetworkInterface ( )
2012-09-30 19:16:31 +00:00
}
2014-03-04 19:53:33 +00:00
ResourceMonitor_cleanup ( ) {
Global Config_readinDiskLoad , ResourceMonitor_hDrive
If Config_readinDiskLoad
DllCall ( " CloseHandle " , " UInt " , ResourceMonitor_hDrive ) ;; used in ResourceMonitor_getDiskLoad
2012-09-30 19:16:31 +00:00
}
2015-11-27 19:51:19 +00:00
ResourceMonitor_bytesToString ( b ) {
If ( b > 1047527424 ) {
b / = 1024 * 1024 * 1024
unit := " GB "
} Else If ( b > 1022976 ) {
b / = 1024 * 1024
unit := " MB "
} Else If ( b > 999 ) {
b / = 1024
unit := " kB "
} Else {
unit := " B "
2012-09-30 17:52:06 +00:00
}
2015-11-27 19:51:19 +00:00
b := Round ( b , 1 )
If ( b > 99.9 Or unit = " B " )
b := Round ( b , 0 )
Return , SubStr ( " " b , - 3 ) . unit
2012-09-30 17:52:06 +00:00
}
2012-09-30 19:16:31 +00:00
2015-01-25 19:44:07 +00:00
ResourceMonitor_getBatteryStatus ( ByRef batteryLifePercent , ByRef acLineStatus ) {
VarSetCapacity ( powerStatus , ( 1 + 1 + 1 + 1 + 4 + 4 ) )
success := DllCall ( " GetSystemPowerStatus " , " UInt " , & powerStatus )
If ( ErrorLevel != 0 Or success = 0 ) {
MsgBox 16 , Power Status , Can 't get the power status . . .
Return
}
2015-11-27 19:51:19 +00:00
acLineStatus := NumGet ( powerStatus , 0 , " Char " )
2015-01-25 19:44:07 +00:00
batteryLifePercent := NumGet ( powerStatus , 2 , " Char " )
If acLineStatus = 0
acLineStatus = off
Else If acLineStatus = 1
acLineStatus = on
Else If acLineStatus = 255
acLineStatus = ?
If batteryLifePercent = 255
batteryLifePercent = ? ? ?
}
;; PhiLho: AC/Battery status (http://www.autohotkey.com/forum/topic7633.html)
2015-01-30 22:38:40 +00:00
ResourceMonitor_getDiskLoad ( ByRef readLoad , ByRef writeLoad ) {
2012-09-30 19:16:31 +00:00
Global ResourceMonitor_hDrive
Static oldReadCount , oldWriteCount
2012-12-05 12:39:51 +00:00
2016-04-13 16:48:37 +00:00
nReturn := oldReadCount := oldWriteCount := 0
2012-09-30 19:16:31 +00:00
dpSize := 5 * 8 + 4 + 4 + 4 + 4 + 8 + 4 + 8 * ( A_IsUnicode ? 2 : 1 ) + 12 ;; 88?
VarSetCapacity ( dp , dpSize )
DllCall ( " DeviceIoControl " , " UInt " , ResourceMonitor_hDrive , " UInt " , 0x00070020 , " UInt " , 0 , " UInt " , 0 , " UInt " , & dp , " UInt " , dpSize , " UIntP " , nReturn , " UInt " , 0 ) ;; IOCTL_DISK_PERFORMANCE
2012-12-05 12:39:51 +00:00
2012-09-30 19:16:31 +00:00
newReadCount := NumGet ( dp , 40 )
newWriteCount := NumGet ( dp , 44 )
readLoad := SubStr ( " " Round ( ( 1 - 1 / ( 1 + newReadCount - oldReadCount ) ) * 100 ) , - 2 )
writeLoad := SubStr ( " " Round ( ( 1 - 1 / ( 1 + newWriteCount - oldWriteCount ) ) * 100 ) , - 2 )
oldReadCount := newReadCount
oldWriteCount := newWriteCount
}
;; fures: System + Network monitor - with net history graph (http://www.autohotkey.com/community/viewtopic.php?p=260329)
;; SKAN: HDD Activity Monitoring LED (http://www.autohotkey.com/community/viewtopic.php?p=113890&sid=64d9824fdf252697ff4d5026faba91f8#p113890)
2015-01-30 22:38:40 +00:00
ResourceMonitor_getMemoryUsage ( ) {
2012-09-30 19:16:31 +00:00
VarSetCapacity ( memoryStatus , 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 )
DllCall ( " kernel32.dll\GlobalMemoryStatus " , " UInt " , & memoryStatus )
Return , SubStr ( " " Round ( * ( & memoryStatus + 4 ) ) , - 2 ) ;; LS byte is enough, 0..100
}
;; fures: System + Network monitor - with net history graph (http://www.autohotkey.com/community/viewtopic.php?p=260329)
2014-03-04 19:53:33 +00:00
ResourceMonitor_getNetworkInterface ( ) {
Global Config_readinNetworkLoad , ResourceMonitor_networkInterface
2012-12-05 12:39:51 +00:00
2014-03-04 19:53:33 +00:00
objWMIService := ComObjGet ( " winmgmts:{impersonationLevel=impersonate}!\\ " . A_ComputerName . " \root\cimv2 " )
WQLQuery := " SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name LIKE '% " . Config_readinNetworkLoad . " %' "
ResourceMonitor_networkInterface := objWMIService . ExecQuery ( WQLQuery ) . ItemIndex ( 0 )
2012-09-30 19:16:31 +00:00
}
2014-03-04 19:53:33 +00:00
;; Pillus: System monitor (HDD/Wired/Wireless) using keyboard LEDs (http://www.autohotkey.com/board/topic/65308-system-monitor-hddwiredwireless-using-keyboard-leds/)
2012-09-30 19:16:31 +00:00
2015-01-30 22:38:40 +00:00
ResourceMonitor_getNetworkLoad ( ByRef upLoad , ByRef dnLoad ) {
2014-03-04 19:53:33 +00:00
Global ResourceMonitor_networkInterface
2012-12-05 12:39:51 +00:00
2014-03-04 19:53:33 +00:00
ResourceMonitor_networkInterface . Refresh_
2015-11-27 19:51:19 +00:00
dnLoad := ResourceMonitor_bytesToString ( ResourceMonitor_networkInterface . BytesReceivedPerSec ) . " /s "
upLoad := ResourceMonitor_bytesToString ( ResourceMonitor_networkInterface . BytesSentPerSec ) . " /s "
2012-09-30 19:16:31 +00:00
}
2014-03-04 19:53:33 +00:00
;; Pillus: System monitor (HDD/Wired/Wireless) using keyboard LEDs (http://www.autohotkey.com/board/topic/65308-system-monitor-hddwiredwireless-using-keyboard-leds/)
2012-09-30 19:16:31 +00:00
2015-01-30 22:38:40 +00:00
ResourceMonitor_getSystemTimes ( ) {
;; Total CPU Load
2012-09-30 19:16:31 +00:00
Static oldIdleTime , oldKrnlTime , oldUserTime
Static newIdleTime , newKrnlTime , newUserTime
2016-04-13 16:48:37 +00:00
newIdleTime := newKrnlTime := newUserTime := 0
2012-09-30 19:16:31 +00:00
oldIdleTime := newIdleTime
oldKrnlTime := newKrnlTime
oldUserTime := newUserTime
DllCall ( " GetSystemTimes " , " Int64P " , newIdleTime , " Int64P " , newKrnlTime , " Int64P " , newUserTime )
2022-02-15 21:38:14 +00:00
sysTime := Round ( ( 1 - ( newIdleTime - oldIdleTime ) / ( newKrnlTime - oldKrnlTime + newUserTime - oldUserTime ) ) * 100 )
2012-09-30 19:16:31 +00:00
Return , sysTime ;; system time in percent
}
;; Sean: CPU LoadTimes (http://www.autohotkey.com/forum/topic18913.html)
2015-11-27 19:51:19 +00:00
ResourceMonitor_getText ( ) {
Global Config_readinCpu , Config_readinDiskLoad , Config_readinMemoryUsage , Config_readinNetworkLoad
text := " "
If Config_readinCpu
text .= " CPU: " ResourceMonitor_getSystemTimes ( ) " % "
If Config_readinMemoryUsage {
If ( Config_readinCpu )
text .= " | "
text .= " RAM: " ResourceMonitor_getMemoryUsage ( ) " % "
}
If Config_readinDiskLoad {
If ( Config_readinCpu Or Config_readinMemoryUsage )
text .= " | "
ResourceMonitor_getDiskLoad ( rLoad , wLoad )
text .= " Dr: " rLoad " % | Dw: " wLoad " % "
}
If Config_readinNetworkLoad {
If ( Config_readinCpu Or Config_readinMemoryUsage Or Config_readinDiskLoad )
text .= " | "
ResourceMonitor_getNetworkLoad ( upLoad , dnLoad )
text .= " UP: " upLoad " | dn: " dnLoad " "
}
Return , text
}
2022-02-15 21:38:14 +00:00
ResourceMonitor_getSystemTimes2 ( ByRef IdleTime ) {
DllCall ( " GetSystemTimes " , " Int64P " , IdleTime , " Int64P " , KernelTime , " Int64P " , UserTime )
Return KernelTime + UserTime
}
ResourceMonitor_getCpuLoad ( period := 500 ) {
total := ResourceMonitor_getSystemTimes2 ( idle )
Sleep , % period
total2 := ResourceMonitor_getSystemTimes2 ( idle2 )
Return 100 * ( 1 - ( idle2 - idle ) / ( total2 - total ) )
}
ResourceMonitor_getCpuText ( ) {
Return , Floor ( ResourceMonitor_getCpuLoad ( ) ) . " % "
}
ResourceMonitor_GlobalMemoryStatusEx ( )
{
static MSEX , init := NumPut ( VarSetCapacity ( MSEX , 64 , 0 ) , MSEX , " uint " )
if ! ( DllCall ( " GlobalMemoryStatusEx " , " ptr " , & MSEX ) )
throw Exception ( " Call to GlobalMemoryStatusEx failed: " A_LastError , - 1 )
return { MemoryLoad : NumGet ( MSEX , 4 , " uint " ) , TotalPhys : NumGet ( MSEX , 8 , " uint64 " ) , AvailPhys : NumGet ( MSEX , 16 , " uint64 " ) }
}
ResourceMonitor_getRamText ( ) {
GMSEx := ResourceMonitor_GlobalMemoryStatusEx ( )
TotalMem := GMSEx . TotalPhys
AvailMem := GMSEx . AvailPhys
mem := RegExReplace ( Floor ( ( TotalMem - AvailMem ) / 1048576 ) , " (\d)(?=(?:\d{3})+(?:\.|$)) " , " $1, " )
Return , mem . " MB "
}