GodlessSinner Posted July 24, 2009 Posted July 24, 2009 #include <Constants.au3> Local $cmd = Run(@comspec & " /c netstat -e", @SystemDir, @SW_SHOW, $STDERR_CHILD + $STDOUT_CHILD) Local $line While 1 $line = StdoutRead($cmd) If @error Then ExitLoop MsgBox(0, "STDOUT read:", $line) Wend How to get from STDOUT only info about received bytes? And why there are 2 msgboxes, with empty first? _____________________________________________________________________________
enaiman Posted July 26, 2009 Posted July 26, 2009 How to get from STDOUT only info about received bytes?I don't know what do you mean; what extra info do you get and you don't want to?After the script exits the loop, $line contains whatever was received. If it doesn't and some content is missing you can change the following line: $line = StdoutRead($cmd) to $line &= StdoutRead($cmd) SNMP_UDF ... for SNMPv1 and v2c so far, GetBulk and a new example script wannabe "Unbeatable" Tic-Tac-Toe Paper-Scissor-Rock ... try to beat it anyway :)
99ojo Posted July 27, 2009 Posted July 27, 2009 (edited) I don't know what do you mean; what extra info do you get and you don't want to? After the script exits the loop, $line contains whatever was received. If it doesn't and some content is missing you can change the following line: $line = StdoutRead($cmd) to $line &= StdoutRead($cmd) Hi, maybe another solution for getting received bytes/sec: $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = "" $strComputer = "localhost" $Output="" $Output = $Output & "Computer: " & $strComputer & @CRLF $Output = $Output & "==========================================" & @CRLF $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface", "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) then For $objItem In $colItems $bytesrec = $objItem.BytesReceivedPersec Next EndIf MsgBox (0,"", "received Bytes per sec: " & $bytesrec) If you have more then 1 NIC, you could add an if before line $bytesrec = like: If StringInStr ($objitem.Name, "VMware Accelerated AMD PCNet Adapter") <> 0 Then $bytesrec = .... ;-)) Stefan Edited July 27, 2009 by 99ojo
GodlessSinner Posted July 28, 2009 Author Posted July 28, 2009 (edited) What wrong with this: #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = 3 $strComputer = @ComputerName $Output="" $Output = $Output & "Computer: " & $strComputer & @CRLF $Output = $Output & "==========================================" & @CRLF $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface", "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $Form1 = GUICreate("Form1", 410, 78, 279, 557) $Label1 = GUICtrlCreateLabel("Bytes/sec", 8, 16, 63, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $rec = GUICtrlCreateInput("", 80, 16, 113, 21) GUISetState(@SW_SHOW) While 1 Sleep(10) If IsObj($colItems) then For $objItem In $colItems $bytesrec = $objItem.BytesReceivedPersec GUICtrlSetData($rec, $bytesrec) Next EndIf WEnd I see only zero in $rec Edited July 28, 2009 by Vitas _____________________________________________________________________________
PsaltyDS Posted July 29, 2009 Posted July 29, 2009 What wrong with this: #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $colItems = 3 $strComputer = @ComputerName $Output="" $Output = $Output & "Computer: " & $strComputer & @CRLF $Output = $Output & "==========================================" & @CRLF $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface", "WQL", _ $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $Form1 = GUICreate("Form1", 410, 78, 279, 557) $Label1 = GUICtrlCreateLabel("Bytes/sec", 8, 16, 63, 20) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") $rec = GUICtrlCreateInput("", 80, 16, 113, 21) GUISetState(@SW_SHOW) While 1 Sleep(10) If IsObj($colItems) then For $objItem In $colItems $bytesrec = $objItem.BytesReceivedPersec GUICtrlSetData($rec, $bytesrec) Next EndIf WEnd I see only zero in $rec Time-based perf data (i.e. anythin "persec") is supposed to be referenced using a refresh object: expandcollapse popup#include <GUIConstantsEx.au3> Global $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20 Global $colItems, $strComputer = @ComputerName Global $Output, $oTcpipIntfc, $oItem Global $Form1 = GUICreate("Form1", 400, 400) Global $Edit1 = GUICtrlCreateEdit("Bytes/sec:", 10, 10, 380, 340) Global $Button1 = GUICtrlCreateButton("Quit", 150, 360, 100, 30) GUISetState(@SW_SHOW) Global $oWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Global $oRefresher = ObjCreate("WbemScripting.Swbemrefresher") Global $oTcpipNetworkIntfc = $oRefresher.AddEnum($oWMIService, "Win32_PerfRawData_Tcpip_NetworkInterface" ).ObjectSet Global $iTimer = TimerInit() If IsObj($oWMIService) And IsObj($oRefresher) And IsObj($oTcpipNetworkIntfc) Then While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button1 Exit Case Else If TimerDiff($iTimer) >= 1500 Then $Output = "Computer: " & $strComputer & @CRLF $Output &= "==========================================" & @CRLF $oRefresher.Refresh $n = 0 For $oItem In $oRefresher For $oTcpipIntfc In $oItem.ObjectSet $bytesrec = $oTcpipIntfc.BytesReceivedPersec If $bytesrec < 0 Then $bytesrec += 2^32 ; Correct UINT32 to INT32 error for bit 32 $Output &= $n & ": " & $bytesrec & @CRLF $n += 1 Next Next ControlSetText($Form1, "", $Edit1, $Output) $iTimer = TimerInit() EndIf EndSwitch WEnd Else MsgBox(16, "Error", "Failed to initialize objects.") Exit EndIf The interesting thing is that while I seem to get valid data with that, it is giving me total bytes received (constantly counting up) vice bytespersec? >_< Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
GodlessSinner Posted July 30, 2009 Author Posted July 30, 2009 expandcollapse popup#include <GUIConstantsEx.au3> Global $wbemFlagReturnImmediately = 0x10, $wbemFlagForwardOnly = 0x20 Global $colItems, $strComputer = @ComputerName Global $Output, $oTcpipIntfc, $oItem Global $Form1 = GUICreate("Form1", 400, 400) Global $Edit1 = GUICtrlCreateEdit("Bytes/sec:", 10, 10, 380, 340) Global $Button1 = GUICtrlCreateButton("Quit", 150, 360, 100, 30) GUISetState(@SW_SHOW) Global $oWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Global $oRefresher = ObjCreate("WbemScripting.Swbemrefresher") Global $oTcpipNetworkIntfc = $oRefresher.AddEnum($oWMIService, "Win32_PerfRawData_Tcpip_NetworkInterface" ).ObjectSet Global $iTimer = TimerInit() If IsObj($oWMIService) And IsObj($oRefresher) And IsObj($oTcpipNetworkIntfc) Then While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button1 Exit Case Else If TimerDiff($iTimer) >= 1500 Then $Output = "Computer: " & $strComputer & @CRLF $Output &= "==========================================" & @CRLF $oRefresher.Refresh $n = 0 For $oItem In $oRefresher For $oTcpipIntfc In $oItem.ObjectSet $bytesrec = $oTcpipIntfc.BytesReceivedPersec If $bytesrec < 0 Then $bytesrec += 2^32 ; Correct UINT32 to INT32 error for bit 32 $Output &= $n & ": " & $bytesrec & @CRLF $n += 1 Next Next ControlSetText($Form1, "", $Edit1, $Output) $iTimer = TimerInit() EndIf EndSwitch WEnd Else MsgBox(16, "Error", "Failed to initialize objects.") Exit EndIf : ==> The requested action with this object has failed.: Global $oTcpipNetworkIntfc = $oRefresher.AddEnum($oWMIService, "Win32_PerfRawData_Tcpip_NetworkInterface" ).ObjectSet Global $oTcpipNetworkIntfc = $oRefresher.AddEnum($oWMIService, "Win32_PerfRawData_Tcpip_NetworkInterface" )^ ERROR _____________________________________________________________________________
99ojo Posted July 30, 2009 Posted July 30, 2009 Hi, i did a 1:1 copy & paste with your posted code. No errors. WinXP SP3 AutoIT 3.3.0.0. ;-(( Stefan
GodlessSinner Posted July 30, 2009 Author Posted July 30, 2009 (edited) I understood, the reason in WinVista. Will have to do as in my first post.. >_< Any ideas for getting received bytes in this OS are welcome. Edited July 30, 2009 by Vitas _____________________________________________________________________________
99ojo Posted July 30, 2009 Posted July 30, 2009 I understood, the reason in WinVista.Will have to do as in my first post.. >_< Any ideas for getting received bytes in this OS are welcome.hi,1st) Try #requireadmin at the very beginning of your script.2nd) If this don't work, have a look here:http://msdn.microsoft.com/en-us/library/aa826699(VS.85).aspx;-))Stefan
GodlessSinner Posted July 30, 2009 Author Posted July 30, 2009 I tried it with turned off UAC, and with #RequireAdmin also, - it not helped. _____________________________________________________________________________
GodlessSinner Posted August 1, 2009 Author Posted August 1, 2009 (edited) This code works:expandcollapse popup#include <Constants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $str[20], $trimmed = 0, $alltrimmed = 0, $stout = "" Local $cmd = Run(@comspec & " /c netstat -e", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) Local $line $Form1 = GUICreate("Form1", 321, 70, 355, 477) $Label1 = GUICtrlCreateLabel("Received", 8, 24, 87, 20) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Input1 = GUICtrlCreateInput("0", 104, 24, 153, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY)) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUISetState(@SW_SHOW) While 1 ;Local $cmd = Run(@comspec & " /c netstat -e", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) Sleep(1000) $line &= StdoutRead($cmd) ;getting from STDOUT only number of received bytes and update control whith this info: $str = StringSplit($line,@CR) For $i = 1 to $str[0]-1 Step 2 If $str[$i] <> "" And $i = 5 Then $strn = StringSplit($str[$i],"") $string = $str[$i] For $n = 1 to $strn[0] Step 1 If StringIsDigit($strn[$n]) And $trimmed = 0 Then $alltrimmed = 1 $stout = $stout & $strn[$n] ElseIf Not StringIsDigit($strn[$n]) And $alltrimmed = 1 Then $trimmed = 1 EndIf Next GUICtrlSetData($Input1, $stout) $stout = "" $trimmed = 0 $alltrimmed = 0 ;MsgBox(0,"", $stout) EndIf Next $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEndThis one - doesn't:expandcollapse popup#include <Constants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $str[20], $trimmed = 0, $alltrimmed = 0, $stout = "" ;Local $cmd = Run(@comspec & " /c netstat -e", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) Local $line $Form1 = GUICreate("Form1", 321, 70, 355, 477) $Label1 = GUICtrlCreateLabel("Received", 8, 24, 87, 20) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Input1 = GUICtrlCreateInput("0", 104, 24, 153, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY)) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUISetState(@SW_SHOW) While 1 Local $cmd = Run(@comspec & " /c netstat -e", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) Sleep(1000) $line &= StdoutRead($cmd) ;getting from STDOUT only number of received bytes and update control whith this info: $str = StringSplit($line,@CR) For $i = 1 to $str[0]-1 Step 2 If $str[$i] <> "" And $i = 5 Then $strn = StringSplit($str[$i],"") $string = $str[$i] For $n = 1 to $strn[0] Step 1 If StringIsDigit($strn[$n]) And $trimmed = 0 Then $alltrimmed = 1 $stout = $stout & $strn[$n] ElseIf Not StringIsDigit($strn[$n]) And $alltrimmed = 1 Then $trimmed = 1 EndIf Next GUICtrlSetData($Input1, $stout) $stout = "" $trimmed = 0 $alltrimmed = 0 ;MsgBox(0,"", $stout) EndIf Next $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEndI can't understand! Why?? (modified only 8th and 20th lines, I just moved Local $cmd = Run(@comspec & " /c netstat -e", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) in While, for doing it every second.) Edited August 1, 2009 by Vitas _____________________________________________________________________________
GodlessSinner Posted August 1, 2009 Author Posted August 1, 2009 It works, the reason was in "$line &= StdoutRead($cmd)", must be "$line = StdoutRead($cmd)". Question is almost solved, please, tell me, is this works under WinXP? _____________________________________________________________________________
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