找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: ygqiang

[网络连接] 批处理怎样监控网络流量并自动关机?

[复制链接]
发表于 2011-9-28 23:13:30 | 显示全部楼层
呵呵,很好,学习了!
 楼主| 发表于 2011-9-29 11:02:54 | 显示全部楼层
顶啊,多谢各位了。
 楼主| 发表于 2011-9-30 13:37:53 | 显示全部楼层
本帖最后由 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.        
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-10-7 00:14:29 | 显示全部楼层
有人说:CurrentFlow函数没调用成功  流量统计有问题

xp系统下测试的。
 楼主| 发表于 2011-10-7 02:32:48 | 显示全部楼层
也有人说:是xp系统本身的问题。
发表于 2011-10-7 21:35:05 | 显示全部楼层
试试这样:
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-10-8 09:52:48 | 显示全部楼层
本帖最后由 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版本上,运行都不能达到预期效果。

即使没有开迅雷,还会出现关机的窗口。
发表于 2011-10-8 10:02:31 | 显示全部楼层
回复 37# ygqiang


    36楼代码试试看?
 楼主| 发表于 2011-10-8 11:05:40 | 显示全部楼层
36楼代码,也试过了。

不行。
发表于 2011-10-10 19:14:02 | 显示全部楼层
36楼代码,我这里是测试成功了。

你那没成功有没有提示什么?比如  这个提示BeginFlow:  后面有没有数字?
 楼主| 发表于 2011-12-6 18:33:12 | 显示全部楼层
mark......
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 09:56 , Processed in 0.028146 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表