Neutro Posted August 13, 2017 Share Posted August 13, 2017 (edited) Hey guys, After someone requested help about this in the support forum i thought i would share it here as well The following script uses WMI to detect the active network card on a computer, gets its current download & upload speed and computes the average speeds. You can also setup a minimum threshold to avoid getting false results. expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.2 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1_1 = GUICreate("Network speed info", 467, 331, 192, 124) $Title = GUICtrlCreateLabel("Network speed info", 152, 16, 201, 28) GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif") $Label1 = GUICtrlCreateLabel("Real time download speed:", 16, 72, 386, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Label2 = GUICtrlCreateLabel("Average download speed:", 16, 240, 392, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Label3 = GUICtrlCreateLabel("Dont record if download <", 16, 152, 208, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Label4 = GUICtrlCreateLabel("kB/s", 296, 152, 39, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Input1 = GUICtrlCreateInput("450", 224, 152, 65, 24) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Label5 = GUICtrlCreateLabel("Real time upload speed:", 16, 112, 394, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Label6 = GUICtrlCreateLabel("Dont record if upload <", 16, 192, 208, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $Input2 = GUICtrlCreateInput("30", 224, 192, 65, 24) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Label7 = GUICtrlCreateLabel("kB/s", 296, 192, 39, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") $update = GUICtrlCreateButton("Update", 360, 168, 81, 33) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Label8 = GUICtrlCreateLabel("Average upload speed:", 16, 280, 416, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2") ;detect the active network card $oSelect_active_network_cards = $objWMIService.ExecQuery('SELECT ProductName FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2 OR NetConnectionStatus = 9', "WQL") for $oSelect_active_network_card in $oSelect_active_network_cards $active_network_card = stringright($oSelect_active_network_card.ProductName, 10) ;get part of the name of the active network card Next $threshhold_download = 450 $threshhold_upload = 30 $average_download_speed = 0 $average_upload_speed = 0 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $update $threshhold_download = Guictrlread($Input1) $threshhold_upload = Guictrlread($Input2) EndSwitch update_speeds() sleep(1) WEnd func update_speeds() ;get the download and upload speed $oNetwork_cards = $objWMIService.ExecQuery("SELECT BytesReceivedPerSec, BytesSentPerSec FROM Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE name LIKE '%" & $active_network_card & "%'", "WQL") For $oNetwork_card In $oNetwork_cards $current_download_speed = Round($oNetwork_card.BytesReceivedPerSec / 1024) $current_upload_speed = Round($oNetwork_card.BytesSentPerSec / 1024) GUICtrlSetData($Label1, "Real time download speed: " & $current_download_speed & " kB/s") GUICtrlSetData($Label5, "Real time upload speed: " & $current_upload_speed & " kB/s") ;calculate the average download speed if $current_download_speed > $threshhold_download then $average_download_speed = Round(($current_download_speed + $average_download_speed) / 2) GUICtrlSetData($Label2, "Average download speed: " & $average_download_speed & " kB/s") EndIf ;calculate the average upload speed if $current_upload_speed > $threshhold_upload Then $average_upload_speed = Round(($current_upload_speed + $average_upload_speed) / 2) GUICtrlSetData($Label8, "Average upload speed: " & $average_upload_speed & " kB/s") EndIf Next EndFunc There are others topics in the example forum that show how to get network cards performance from WMI but afaik none showed how to match different WMI providers to determine the average speed so here is one way to do it Edited August 13, 2017 by Neutro Identify active network connections and change DNS server - Easily export Windows network settings Clean temporary files from Windows users profiles directories - List Active Directory Groups members Export content of an Outlook mailbox to a PST file - File patch manager - IRC chat connect example Thanks again for your help Water! Link to comment Share on other sites More sharing options...
Trong Posted August 13, 2017 Share Posted August 13, 2017 WMI, Nice script! Neutro 1 Regards, Link to comment Share on other sites More sharing options...
joseLB Posted September 10, 2017 Share Posted September 10, 2017 I tried this script in Win7, OK. In win10, the values of the 2 first lines does not appear Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now