;--------------------------------------------------------------------------------------------------------------- ; CHANGELOG: ; ; Oct 07 2023: Initial release by Glisense ltd ; ; Current script is designed for use together with KeyboardExtension® (https://keyboardextension.com) ; ; For the latest version, description and licensing terms go to https://keyboardextension.com/plugins/14e8b41b ; ;--------------------------------------------------------------------------------------------------------------- #Requires AutoHotkey v2 #NoTrayIcon Persistent CoordMode 'ToolTip' UpdateTraffic(&downloaded := 0, &uploaded := 0, &downloadPerSec := 0, &uploadPerSec := 0) SetTimer UpdateTraffic.Bind(&downloaded, &uploaded, &downloadPerSec, &uploadPerSec), 1000 UpdateTraffic(&downloaded, &uploaded, &downloadPerSec, &uploadPerSec) { static prevData := '', prevTime := 0 data := TrafficInfo.GetInfo() time := A_TickCount if prevTime { elapsedSec := (time - prevTime) / 1000 dnRate := Round((data.dn - prevData.dn) / elapsedSec) upRate := Round((data.up - prevData.up) / elapsedSec) downloaded := ByteSizeConverter(data.dn) uploaded := ByteSizeConverter(data.up) downloadPerSec := ByteSizeConverter(dnRate) . 'ps' uploadPerSec := ByteSizeConverter(upRate) . 'ps' /* ToolTip 'downloaded: ' . downloaded . '`n' . 'uploaded: ' . uploaded . '`n' . 'downloadPerSec: ' . downloadPerSec . '`n' . 'uploadPerSec: ' . uploadPerSec, 2, 2 */ } prevData := data prevTime := time } ByteSizeConverter(bytes) { bytes .= ' B' for v in ['KB', 'MB', 'GB', 'TB'] { if (f := RegExReplace(bytes, '[^\d.]')) >= 1024 { bytes := Format('{:.2f} ' . v, f / 1024) } } until f < 1024 return bytes } class TrafficInfo { static __New() { this.MIB_IF_ROW2 := Buffer(1352, 0) DllCall('LoadLibrary', 'Str', 'Iphlpapi.dll', 'Ptr') DllCall('iphlpapi\GetBestInterface', 'Ptr', 0, 'PtrP', &IfIndex := 0) NumPut('Ptr', IfIndex, this.MIB_IF_ROW2, 8) } static GetInfo() { DllCall('iphlpapi\GetIfEntry2', 'Ptr', this.MIB_IF_ROW2) return {dn: this.downloaded, up: this.uploaded} } static downloaded => NumGet(this.MIB_IF_ROW2, 1256, 'Int64') static uploaded => NumGet(this.MIB_IF_ROW2, 1320, 'Int64') }