[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
vbs
  1. s = "SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE " & _
  2.     "TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 2"
  3. Set oWshShell = CreateObject("WScript.Shell")
  4. Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  5. Set oSWbemEventSource = oWMI.ExecNotificationQuery(s)
  6. Do
  7.     Set oSWbemObject = oSWbemEventSource.NextEvent()
  8.     Select Case oSWbemObject.Path_.Class
  9.         Case "__InstanceCreationEvent"
  10.             'MsgBox "U盘插入,盘符:" & oSWbemObject.TargetInstance.DeviceId
  11.             oWshShell.Run "net use ......", 0
  12.         Case "__InstanceDeletionEvent"
  13.             'MsgBox "U盘移除,盘符:" & oSWbemObject.TargetInstance.DeviceId
  14.             oWshShell.Run "net use ......", 0
  15.     End Select
  16. Loop
复制代码
net命令自己修改一下
1

评分人数


QQ 20147578

TOP

回复 12# newswan


需要这么查询的目的是?
没理解什么环境需要这个需求

QQ 20147578

TOP

回复 15# newswan


我测试了win7x64

拔插U盘会触发设定的程序

在U盘上写入删除修改文件,均不会触发设定的程序

QQ 20147578

TOP

回复 18# newswan


为什么要加 case else
原代码已经满足了你的需求,不是不要加这个么
加了这个反而不好

还有 ps 不是用了 Switch ($class) 么
你把这个去掉当然有问题了

QQ 20147578

TOP

提前过滤掉 __InstanceModificationEvent
代码运行查看cpu占用基本为0,不用在意这个吧
再说19楼说了,即使过滤掉,还是要对结果进行 case 或 Switch

非要过滤掉,vbs可以变通一下,当然代码非但没简洁反而更复杂了
  1. s1 = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 2"
  2. s2 = "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 2"
  3. Set oWshShell = CreateObject("WScript.Shell")
  4. Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  5. Set oSWbemSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
  6. Set o1 = CreateObject("WbemScripting.SWbemNamedValueSet")
  7. o1.Add "类型", "插入"
  8. Set o2 = CreateObject("WbemScripting.SWbemNamedValueSet")
  9. o2.Add "类型", "拔出"
  10. oWMI.ExecNotificationQueryAsync oSWbemSink, s1,,,, o1
  11. oWMI.ExecNotificationQueryAsync oSWbemSink, s2,,,, o2
  12. Do
  13.     WScript.Sleep 100
  14. Loop
  15. Sub Sink_OnObjectReady(objWbemObject, objWbemAsyncContext)
  16.     If objWbemAsyncContext.Item("类型") = "插入" Then msgbox "插入"
  17.     If objWbemAsyncContext.Item("类型") = "拔出" Then msgbox "拔出"
  18. End Sub
复制代码

QQ 20147578

TOP

返回列表