Board logo

标题: [网络连接] 批处理怎样监控网络流量并自动关机? [打印本页]

作者: ygqiang    时间: 2011-7-6 00:28     标题: 批处理怎样监控网络流量并自动关机?

本帖最后由 ygqiang 于 2011-10-7 00:13 编辑

xp系统下,晚上  用迅雷下载高清视频,一开始有200KB/S的下载速度,有的时候,就突然没有速度了。(是通过web页面拨号上网的,如果断线,会自动重新拨号,这个时候,在30分钟以内,会重新拨号多次)

如果30分钟以后,仍然无法拨号成功(不能上网),就自动关机


2011-9-28最新需求如下:

开机,自动启动并监视迅雷,如果迅雷没有运行,则一直监视

如果迅雷已经运行了,则如果20分钟之内网络流量<20k(还要考虑遇到无法拨号成功的情况),就自动关机。


看33楼代码。


33楼vbs代码出现新问题。
这个vbs代码,正常情况下,如果检测到运行迅雷,在2分钟内,如果流量《20k,才会自动关机。

问题就是:运行迅雷(不下载),即使开qq  看在线视频,还会在2分钟内自动关机。
运行迅雷(不下载),一直开qq  看在线视频,在2分钟内,流量应该》20k,应该不会自动关机啊?

作者: ygqiang    时间: 2011-7-6 09:52

顶下,多谢各位啊。
作者: lxzzr    时间: 2011-7-6 09:59

用批处理来监控迅雷的下载流量恐怕做不到...
作者: Demon    时间: 2011-7-6 11:05

真是无所不能的批处理
作者: CrLf    时间: 2011-7-6 11:18

4# Demon


冷嘲热讽很有意思吗?
作者: Demon    时间: 2011-7-6 11:29

4# Demon


冷嘲热讽很有意思吗?
zm900612 发表于 2011-7-6 11:18

在很多人看来,批处理是无所不能的,所以才会问这种问题
作者: CrLf    时间: 2011-7-6 11:34

6# Demon


哦,那我误会你了...刚刚鸡冻了哈,sorry
确实很多人把批处理的功能无限放大、看得太神秘,不过这也没办法呀,人家就是不会才来求助的嘛,要是对批处理的足够非常透彻,也就基本上能够自给自足了的。
作者: caruko    时间: 2011-7-6 16:15

我记得是可以的,流量虽然监测不出来,但是可以监测到数据量,然后对比时间,可以知道大概速度。
检测数据流量命令: netstat -e
作者: caruko    时间: 2011-7-6 16:17

另外,“性能日志与警报”里面,可以监测“网络速度”,低于一定程度,可以自动执行命令。
作者: CrLf    时间: 2011-7-6 16:30

9# caruko


学习了...
不过 win7 下我一直搞不懂如何在“性能日志与警报”面板中设置触发任务,能否请知情人指点一下呢?
另外是否能够用批处理来操作“性能日志与警报”呢?
作者: caruko    时间: 2011-7-6 17:18

10# zm900612


批处理只能开启&停止 已经存在的“ 性能日志与警报” 项目。

警报默认只会在日志里面写入日志,要执行脚本,需要自己更改。
作者: mstsc    时间: 2011-7-6 21:23

都说的我不懂。最主要是没弄过。要是自己弄过就能明白的多了
作者: caruko    时间: 2011-7-7 08:29

本帖最后由 caruko 于 2011-7-7 08:32 编辑

试试这个脚本吧,主要为了防止数值溢出,所以直接去掉后3位,而不是/1024
  1. @echo off &setlocal ENABLEDELAYEDEXPANSION
  2. for /f "tokens=2" %%i in ('netstat -e ^|findstr "Bytes"') do (
  3.          set "kb=%%i"
  4.          set "kb=!kb:~0,-3!"
  5. )
  6. for /f "tokens=2,4,6,8" %%a in ('systeminfo ^|findstr "启动时间"') do (
  7.          set /a stime=( ( %%a*24 + %%b ) * 60 + %%c ) *60 + %%d
  8. )
  9. :loop
  10. ping -n 3000 127.1>nul
  11. for /f "tokens=2" %%i in ('netstat -e ^|findstr "Bytes"') do (
  12.          set "newkb=%%i"
  13.          set "newkb=!newkb:~0,-3!"
  14. )
  15. for /f "tokens=2,4,6,8" %%a in ('systeminfo ^|findstr "启动时间"') do (
  16.          set /a etime=( ( %%a*24 + %%b ) * 60 + %%c ) *60 + %%d
  17. )
  18. set /a ll= ( newkb-kb ) / ( etime - stime )
  19. if !ll! lss 20 (
  20.             shutdown -s -t 5
  21.             exit
  22. ) else (
  23.     set /a kb=newkb,stime=etime
  24.     goto :loop
  25. )
复制代码

作者: CrLf    时间: 2011-7-7 08:47

13# caruko


systeminfo 太慢了,建议用 wmic os 或者 net user %username%,而且没必要循环获取启动时间吧,那个太耗时了...而且通过启动时间到当前的时差来计算平均速度并非即时的,一旦开机久了就不准了,而且假如在开机之后久不联网,就产生误判了...
作者: ygqiang    时间: 2011-7-7 10:38

顶下,期待高手来解决啊。
作者: caruko    时间: 2011-7-7 11:15

用systeminfo为了省去调用%time%的计算麻烦。
倒是没注意过时间是否准确。

其实也就是大概判断,ping -n 3000 时间足够长了,循环不占用什么资源,倒是ping用的多,虽然可以用其它办法解决,比如设置计划任务。
其实就是图懒。
作者: CrLf    时间: 2011-7-7 11:27

16# caruko


用 wmic os get LastBootUpTime,LocalDateTime 更省事噢~
作者: caruko    时间: 2011-7-7 16:32

本帖最后由 caruko 于 2011-7-7 16:37 编辑

17# zm900612


WMIC的试了一下,都是准确的时间点。
如果要计算 时间差,可能需要 跨小时来计算,但最麻烦的是跨日期、跨月、甚至跨年。
比如 6月31晚上 挂机下载,那么时间到 7月1日后,计算就复杂多了。

而systeminfo 就没有这个麻烦,因为它的启动时间本身就是时间差,而不是时间点。
作者: ygqiang    时间: 2011-7-8 06:14

  1. @Echo Off
  2. :Loop
  3. Ping /n 1 www.bathome.net>nul||ShutDown /s /t 1
  4. MsHta JavaScript:document.write();setTimeout('close()',300000);
  5. Goto Loop
复制代码
不知道能否结合这个,实现所需要的效果呢?
作者: ygqiang    时间: 2011-7-9 07:59

  1. Dim WSH, WMI, EVN
  2. Set WSH = CreateObject("Wscript.Shell")
  3. Set WMI = GetObject("winmgmts:\\.\root\wmi")
  4. Set EVN = WMI.ExecNotificationQuery("Select * from MSNdis_StatusMediaDisconnect")
  5. Do While True
  6.         Set LatestEvent = EVN.NextEvent
  7.         WSH.Run("shutdown -s -t 0")
  8. Loop
复制代码
这个是lxzzr版主给出的vbs代码,功能是:如果出现断网就自动关机。

我的要求是:如果断网,等待30分钟左右,如果还不能联网,才关闭xp系统。
作者: CrLf    时间: 2011-7-9 09:03

20# ygqiang


ping 不通时关机和当流量低于指定值时关机是完全不同的两个方向,你到底想要什么效果呢?求助时请先说明白自己需要的是什么,而不是让别人去猜测、判断
作者: ygqiang    时间: 2011-7-9 09:07

20# ygqiang


ping 不通时关机和当流量低于指定值时关机是完全不同的两个方向,你到底想要什么效果呢?求助时请先说明白自己需要的是什么,而不是让别人去猜测、判断
zm900612 发表于 2011-7-9 09:03



多谢。

我的意思是指:过30分钟,如果网络完全没有流量(网络掉线、完全断开,这个时候不能上网)的时候,自动关机。
作者: CrLf    时间: 2011-7-9 16:13

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in () do (
  3. set new=
  4. for /f "skip=4 tokens=2" %%a in ('netstat -e') do if not defined new set new=%%a
  5. set /a new=!new:~,-4!,in=new-last,last=new,"t=in/10+^!^!in"
  6. if !in!==10 shutdown /f /s /t 0
  7. mshta "javascript:document.write();setTimeout('close()',180000);"
  8. )
复制代码
网络连接正常时“完全没有流量”是不可能的,所以我按大约超过10kb来判断,不过哪怕没有上网,三十分钟的吞吐量也应该超过10kb了吧...
作者: ygqiang    时间: 2011-7-9 19:01

  1. Dim WSH, WMI, CIM, EVD
  2. Set WSH = CreateObject("Wscript.Shell")
  3. Set WMI = GetObject("winmgmts:\\.\root\wmi")
  4. Set CIM = GetObject("winmgmts:\\.\root\cimv2")
  5. Set EVD = WMI.ExecNotificationQuery("Select * from MSNdis_StatusMediaDisconnect")
  6. Do While True
  7.     Set LatestEvent = EVD.NextEvent
  8.     Wscript.Echo "网络已经断开."
  9.         WScript.Sleep 1800000
  10.         Set Pings = CIM.ExecQuery("Select * From Win32_PingStatus where Address = 'www.baidu.com'")
  11.         For Each Ping in Pings
  12.                 If Ping.StatusCode = 0 Then
  13.                         Wscript.Echo "网络已经连接."
  14.                 Else
  15.                         WScript.Echo "关闭系统"
  16.                         Wscript.Echo WSH.Run("shutdown -s -t 6000")
  17.                 End If
  18.         Next
  19. Loop
复制代码
这是lxzzr版主给出的vbs代码。

不知道与zm900612 版主的bat代码,实现的功能是否一样呢?
作者: fastslz    时间: 2011-7-9 19:15

没时间给你完整代码,wmi 方法参考
自动识别拨号上网还是路由
http://www.bathome.net/thread-3198-1-2.html
作者: ygqiang    时间: 2011-9-25 16:49

顶下,有没有比较好的解决方法?谢谢
作者: ygqiang    时间: 2011-9-27 16:34

有没有人帮忙做下,谢谢
作者: lxzzr    时间: 2011-9-27 16:46

  1. StrComputer = "."
  2. ConnectionID = "本地连接1"
  3. '这里根据实际情况修改
  4. Set ObjectWSH = CreateObject("Wscript.Shell")
  5. Set ObjectWMI = Getobject("winmgmts:\\" & StrComputer)
  6. Set NetCards = ObjectWMI.ExecQuery("Select * from Win32_NetworkAdapter WHERE NetConnectionID='" & ConnectionID & "'")
  7. If NetCards.count<>0 Then
  8. For Each NetCard In NetCards
  9. WScript.Echo "Name: " & NetCard.Name & " MACAddress: " & NetCard.MACAddress
  10. NetCardName = NetCard.Name
  11. Next
  12. Else
  13. Wscript.Echo "网卡不存在."
  14. WScript.Quit(0)
  15. End If
  16. '获取用于上网的网卡信息
  17. CurrentFlow
  18. BeginFlow = CurrentFlow
  19. '获取开始时接收的流量(字节)
  20. Wscript.Echo "BeginFlow: " & BeginFlow
  21. WScript.Sleep 18000
  22. '定义时间范围
  23. CurrentFlow
  24. EndFlow = CurrentFlow
  25. '获取结束时接收的流量(字节)
  26. Wscript.Echo "EndFlow: " & EndFlow
  27. Result = EndFlow-BeginFlow
  28. If Result<10240 Then
  29. '10240即10KB,当18000秒(上面的时间范围)内接收流量小于10KB就关闭系统
  30. WScript.Echo "关闭系统."
  31. ObjectWSH.Run"shutdown.exe -s -t 0", 0, TRUE
  32. End If
  33. '计算结果并比较
  34. WScript.Echo "Exit..."
  35. WScript.Sleep 10000
  36. Function CurrentFlow
  37. Set ObjectFlows = ObjectWMI.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface")
  38. For Each ObjectFlow In ObjectFlows
  39. If ObjectFlow.Name=NetCardName Then
  40. CurrentFlow = ObjectFlow.BytesReceivedPersec
  41. End If
  42. Next
  43. End Function
复制代码

作者: ygqiang    时间: 2011-9-28 15:07

  1. On Error Resume Next
  2. Public CurrentFlowInt
  3. StrComputer = "."
  4. ConnectionID = "本地连接"
  5. '这里根据实际情况修改
  6. Set objWMIService = GetObject("winmgmts:" _
  7.     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  8. Set colMonitoredProcesses = objWMIService. _        
  9.     ExecNotificationQuery("select * from __instancecreationevent " _
  10.         & " within 1 where TargetInstance isa 'Win32_Process'")
  11. i = 0
  12. Do While i = 0
  13.     Set objLatestProcess = colMonitoredProcesses.NextEvent
  14.     If objLatestProcess.TargetInstance.Name = "Thunder.exe" Then
  15. Wscript.Echo "迅雷已运行."
  16. Set ObjectWSH = CreateObject("Wscript.Shell")
  17. Set ObjectWMI = Getobject("winmgmts:\\" & StrComputer)
  18. Set NetCards = ObjectWMI.ExecQuery("Select * from Win32_NetworkAdapter WHERE NetConnectionID='" & ConnectionID & "'")
  19. If NetCards.count<>0 Then
  20. For Each NetCard In NetCards
  21. WScript.Echo "Name: " & NetCard.Name & " MACAddress: " & NetCard.MACAddress
  22. NetCardName = NetCard.Name
  23. strNet = Split(NetCard.Name, " ", -1, 1)
  24. str1 = strNet(0) & strNet(1) & strNet(2)
  25. Next
  26. Else
  27. Wscript.Echo "网卡不存在."
  28. WScript.Quit(0)
  29. End If
  30. '获取用于上网的网卡信息
  31. CurrentFlow
  32. BeginFlow = CurrentFlowInt
  33. '获取开始时接收的流量(字节)
  34. Wscript.Echo "BeginFlow: " & BeginFlow
  35. WScript.Sleep 120000
  36. '定义时间范围
  37. CurrentFlow
  38. EndFlow = CurrentFlowInt
  39. '获取结束时接收的流量(字节)
  40. Wscript.Echo "EndFlow: " & EndFlow
  41. Result = EndFlow-BeginFlow
  42. If Result<10240 Then
  43. '10240即10KB,当120000毫秒(120秒=2分钟)(上面的时间范围)内接收流量小于10KB就关闭系统
  44. WScript.Echo "关闭系统."
  45. ObjectWSH.Run"shutdown.exe -s -t 0", 0, TRUE
  46. End If
  47. '计算结果并比较
  48. WScript.Echo "Exit..."
  49. WScript.Sleep 10000
  50. WScript.Quit(0)
  51. End If
  52. Loop
  53. Function CurrentFlow
  54. Set ObjectFlows = ObjectWMI.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface")
  55. For Each ObjectFlow In ObjectFlows
  56. strNetName = Split(ObjectFlow.Name, " ", -1, 1)
  57. str2 = strNetName(0) & strNetName(1) & strNetName(2)
  58. If str1 = str2 Then
  59. CurrentFlowInt = ObjectFlow.BytesReceivedPersec
  60. End If
  61. Next
  62. End Function
复制代码
这个代码,属于测试代码,时间间隔设置成2分钟,会陆续弹出相关窗口。

遇到的问题是:

xp sp3系统下,

如果vbs代码先启动,再启动迅雷7的话,测试正常(弹出窗口,可以自动关机)。

如果迅雷7先启动,再运行这个vbs代码,测试无反映(不弹出窗口,不自动关机)。
作者: wc726842270    时间: 2011-9-28 22:56

回复 9# caruko


    学习了,一会研究一下,真没想到它还有这种作用,当然其它的我也不了解,呵呵
作者: 920168    时间: 2011-9-28 23:13

呵呵,很好,学习了!
作者: ygqiang    时间: 2011-9-29 11:02

顶啊,多谢各位了。
作者: ygqiang    时间: 2011-9-30 13:37

本帖最后由 ygqiang 于 2011-10-6 20:46 编辑

下面是初步测试vbs代码,可以根据需要,修改时间长度、取消弹出窗口代码

但遇到个小问题,见1楼描述。
  1. '======================================================================
  2. '程序开始------检测迅雷是否运行-----是-----开始网络监视
  3. '       | ↑
  4. '       否 |
  5. '       | |
  6. ' ↑------ 一直监视系统进程-----迅雷运行---
  7. ' |       |
  8. ' ----------- 未运行
  9. '======================================================================
  10. On Error Resume Next
  11. Public CurrentFlowInt, ProFlag
  12. ConnectionID = "本地连接"
  13. Set ObjectNetwork = CreateObject("Wscript.Network")
  14. strComputer = ObjectNetwork.ComputerName
  15. '获取计算机名,必须用字符串,不能用.代替
  16. Set ObjectWSH = Wscript.createObject("Wscript.shell")
  17. Set ObjWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  18. Set NetCards = ObjWMIService.ExecQuery("Select * from Win32_NetworkAdapter WHERE NetConnectionID='" & ConnectionID & "'")
  19. If NetCards.count<>0 Then
  20. For Each NetCard In NetCards
  21. WScript.Echo "Name: " & NetCard.Name & "        MACAddress: " & NetCard.MACAddress
  22. NetCardName = NetCard.Name
  23. strNet = Split(NetCard.Name, " ", -1, 1)
  24. str1 = strNet(0) & strNet(1) & strNet(2)
  25. Next
  26. Else
  27. Wscript.Echo "网卡不存在."
  28. WScript.Quit(0)
  29. End If
  30. '获取用于上网的网卡信息
  31. Set CheckProcess = ObjWMIService.ExecQuery("Select * from Win32_Process WHERE Name='Thunder.exe'")
  32. If CheckProcess.count<>0 Then
  33. ProFlag = 0
  34. Else
  35. ProFlag = 1
  36. End If
  37. Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa 'Win32_Process'")
  38. i = 0
  39. Do While i = 0
  40.     Set CheckProcess = ObjWMIService.ExecQuery("Select * from Win32_Process WHERE Name='Thunder.exe'")
  41. If CheckProcess.count<>0 Then
  42. Wscript.Echo "迅雷已运行."
  43. '监视网络
  44. CurrentFlow
  45. BeginFlow = CurrentFlowInt
  46. '获取开始时接收的流量(字节)
  47. Wscript.Echo "BeginFlow: " & BeginFlow
  48. WScript.Sleep 120000
  49. '定义时间范围
  50. Else
  51. Wscript.Echo "迅雷未运行."
  52. Set objLatestProcess = colMonitoredProcesses.NextEvent
  53. '监视迅雷
  54.     If objLatestProcess.TargetInstance.Name = "Thunder.exe" Then
  55. Wscript.Echo "迅雷已运行."
  56. CurrentFlow
  57. BeginFlow = CurrentFlowInt
  58. '获取开始时接收的流量(字节)
  59. Wscript.Echo "BeginFlow: " & BeginFlow
  60. WScript.Sleep 120000
  61. '定义时间范围
  62. End If
  63. End If
  64. CurrentFlow
  65. EndFlow = CurrentFlowInt
  66. '获取结束时接收的流量(字节)
  67. Wscript.Echo "EndFlow: " & EndFlow
  68. Result = EndFlow - BeginFlow
  69. If Result<20480 Then
  70. '10240即10KB,当120000毫秒(120秒=2分钟)(上面的时间范围)内接收流量小于20KB就关闭系统
  71. WScript.Echo "关闭系统."
  72. ObjectWSH.Run"shutdown.exe -s -t 0", 0, TRUE
  73. End If
  74. '计算结果并比较
  75. WScript.Echo "Exit ..."
  76. WScript.Quit(0)
  77. Loop
  78. Function CurrentFlow
  79. Set ObjectFlows = objWMIService.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface")
  80. For Each ObjectFlow In ObjectFlows
  81. strNetName = Split(ObjectFlow.Name, " ", -1, 1)
  82. str2 = strNetName(0) & strNetName(1) & strNetName(2)
  83. If str1 = str2 Then
  84. CurrentFlowInt = ObjectFlow.BytesReceivedPersec
  85. End If
  86. Next
  87. End Function
复制代码

作者: ygqiang    时间: 2011-10-7 00:14

有人说:CurrentFlow函数没调用成功  流量统计有问题

xp系统下测试的。
作者: ygqiang    时间: 2011-10-7 02:32

也有人说:是xp系统本身的问题。
作者: broly    时间: 2011-10-7 21:35

试试这样:
  1. '======================================================================
  2. '程序开始------检测迅雷是否运行-----是-----开始网络监视
  3. '                      |                        ↑
  4. '                      否                         |
  5. '                      |                        |
  6. '         ↑------ 一直监视系统进程-----迅雷运行---
  7. '         |              |
  8. '         ----------- 未运行
  9. '======================================================================
  10. On Error Resume Next
  11. Public CurrentFlowInt, ProFlag
  12. ConnectionID = "本地连接"
  13. Set ObjectNetwork = CreateObject("Wscript.Network")
  14. strComputer = ObjectNetwork.ComputerName
  15. '获取计算机名,必须用字符串,不能用.代替
  16. Set ObjectWSH = Wscript.createObject("Wscript.shell")
  17. Set ObjWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  18. Set NetCards = ObjWMIService.ExecQuery("Select * from Win32_NetworkAdapter WHERE NetConnectionID='" & ConnectionID & "'")
  19. If NetCards.count<>0 Then
  20.         For Each NetCard In NetCards
  21.                 WScript.Echo "Name: " & NetCard.Name & "        MACAddress: " & NetCard.MACAddress
  22.                 NetCardName = NetCard.Name
  23.                 strNet = Split(NetCard.Name, " ", -1, 1)
  24.                 str1 = strNet(0) & strNet(1) '& strNet(2)
  25.         Next
  26.         Else
  27.         Wscript.Echo "网卡不存在."
  28.         WScript.Quit(0)
  29. End If
  30. '获取用于上网的网卡信息
  31. Set CheckProcess = ObjWMIService.ExecQuery("Select * from Win32_Process WHERE Name='Thunder.exe'")
  32. If CheckProcess.count<>0 Then
  33.         ProFlag = 0
  34.         Else
  35.         ProFlag = 1
  36. End If
  37. Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa 'Win32_Process'")
  38. i = 0
  39. Do While i = 0
  40.     Set CheckProcess = ObjWMIService.ExecQuery("Select * from Win32_Process WHERE Name='Thunder.exe'")
  41.         If CheckProcess.count<>0 Then
  42.                 Wscript.Echo "迅雷已运行."
  43.                 '监视网络
  44.                 CurrentFlow
  45.                 BeginFlow = CurrentFlowInt
  46.                 '获取开始时接收的流量(字节)
  47.                 Wscript.Echo "BeginFlow: " & BeginFlow
  48.                 WScript.Sleep 120000
  49.                 '定义时间范围
  50.         Else
  51.                 Wscript.Echo "迅雷未运行."
  52.                 Set objLatestProcess = colMonitoredProcesses.NextEvent
  53.                 '监视迅雷
  54.             If objLatestProcess.TargetInstance.Name = "Thunder.exe" Then
  55.                         Wscript.Echo "迅雷已运行."
  56.                         CurrentFlow
  57.                         BeginFlow = CurrentFlowInt
  58.                         '获取开始时接收的流量(字节)
  59.                         Wscript.Echo "BeginFlow: " & BeginFlow
  60.                         WScript.Sleep 120000
  61.                         '定义时间范围
  62.                 End If
  63.         End If
  64.         
  65.         CurrentFlow
  66.         EndFlow = CurrentFlowInt
  67.         '获取结束时接收的流量(字节)
  68.         Wscript.Echo "EndFlow: " & EndFlow
  69.         Result = EndFlow - BeginFlow
  70.         If Result<20480 Then
  71.                 '10240即10KB,当120000毫秒(120秒=2分钟)(上面的时间范围)内接收流量小于20KB就关闭系统
  72.                 WScript.Echo "关闭系统."
  73.                 ObjectWSH.Run"shutdown.exe -s -t 0", 0, TRUE
  74.         End If
  75.         '计算结果并比较
  76.         WScript.Echo "Exit ..."
  77.         WScript.Quit(0)
  78. Loop
  79. Function CurrentFlow
  80.         Set ObjectFlows = objWMIService.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface")
  81.         For Each ObjectFlow In ObjectFlows
  82.                 strNetName = Split(ObjectFlow.Name, " ", -1, 1)
  83.                 str2 = strNetName(0) & strNetName(1) '& strNetName(2)
  84.                 If str1 = str2 Then
  85.                         CurrentFlowInt = ObjectFlow.BytesReceivedPersec
  86.                 End If
  87.         Next
  88. End Function
复制代码

作者: ygqiang    时间: 2011-10-8 09:52

本帖最后由 ygqiang 于 2011-10-8 11:05 编辑

基本确定是xp系统的问题。
  1. Set ObjectFlows = objWMIService.InstancesOf("Win32_PerfRawData_Tcpip_NetworkInterface")
复制代码
这个vbs代码,在3个ghost xp系统下运行测试。
其中2个xp系统下可以运行。另1个xp系统不能运行。

是哪里出现问题了?

不能运行的xp系统,是不是服务没有开启或者别的原因?


不能运行的xp系统,是不是服务没有开启或者别的原因?



刚刚发现,33楼的代码,在这3个ghost xp版本上,运行都不能达到预期效果。

即使没有开迅雷,还会出现关机的窗口。

作者: broly    时间: 2011-10-8 10:02

回复 37# ygqiang


    36楼代码试试看?
作者: ygqiang    时间: 2011-10-8 11:05

36楼代码,也试过了。

不行。
作者: broly    时间: 2011-10-10 19:14

36楼代码,我这里是测试成功了。

你那没成功有没有提示什么?比如  这个提示BeginFlow:  后面有没有数字?
作者: ygqiang    时间: 2011-12-6 18:33

mark......




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2