还是给个示例代码吧。不过这个方案并非优化后的方案:
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oSink = WScript.CreateObject("WbemScripting.SWbemSink","Event_")
Set oWMISvc = oLocator.ConnectServer
oWMISvc.ExecNotificationQueryAsync oSink, _
"Select * From __InstanceCreationEvent WITHIN 5 " & _
"Where TargetInstance ISA 'Win32_LogicalDisk'"
Do
WScript.Sleep 1000
Loop
Sub Event_OnObjectReady(oEventSource,oContext)
Dim str,strFileList
str = oEventSource.TargetInstance.Name
For Each itemFile In oWMISvc.ExecQuery( _
"Select * From CIM_DataFile Where Drive = '" & str & "'")
strFileList = strFileList & itemFile.Name & vbCrLf
Next
WScript.Echo str & vbCrLf & strFileList
End Sub
只是简单地当等待增加盘符,事件实例被创建后则打印出新增加的盘符下所有的文件名。并没有对新增加盘符的类型做检测,另外也可能存在其他一些问题。
至于你要求的其他功能,在以往的脚本中都有讨论过,可以学习一下老贴。
另外,值得注意的是通过BAT也能基本完成你的要求。在XP专业版中提供了一个命令:eventtriggers,利用它可以响应事件日志中的可移动磁盘的插入事件。一个简单的例子:
eventtriggers /create /tr "宽带" /tk c:\ddd.bat /eid 20159
/create表示创建 事件触发器
/tr 指定事件触发器的名字
/tk 表示事件触发器运行的任务(你的其他功能可以写到这里指定的脚本里)
/eid 则指定事件源,在上面的例子中指定的时间源为 PPPOE拨号连接断开事件
执行上面的命令后,会在“任务计划”中多出一项任务,这个任务被启动后会执行C:\ddd.bat,当宽带连接被断开的时候会启动该任务。
写得乱七八糟的,希望能对你有点帮助吧。