我正在尝试监控特定文件夹,以便使用VBS创建文件。
这是文件夹的监视器创建功能,正如我在许多例子中看到的那样:
Function CreateMonitor(path)
Set wmi = GetObject("winmgmts://./root/cimv2")
Set fso = CreateObject("Scripting.FileSystemObject")
path = Split(fso.GetAbsolutePathName(path), ":")
drv = path(0) & ":"
dir = Replace(path(1), "\", "\\")
If Right(dir, 2) <> "\\" Then dir = dir & "\\"
query = "SELECT * FROM __InstanceOperationEvent" & _
" WITHIN " & Interval & _
" WHERE Targetinstance ISA 'CIM_DataFile'" & _
" AND TargetInstance.Drive='" & drv & "'" & _
" AND TargetInstance.Path='" & dir & "'"
Set CreateMonitor = wmi.ExecNotificationQuery(query)
End Function
然后我将它保存到以下var:
Set monitor = CreateMonitor(FolderPath)
最终我使用以下循环,它将无限运行(监视器),并在创建文件夹中的文件时创建一个实例:
Do
Set evt = monitor.NextEvent()
Select Case evt.Path_.Class
Case "__InstanceCreationEvent"
Call SendNotification (evt.TargetInstance)
End Select
Loop
成功监控流程创建后,我愿意继续使用已创建的文件,并将其发送到&#34; SendNotification&#34;功能
问题是函数的调用没有发生,我发现自己陷入了循环而没有进入这个函数。它等待直到创建文件,然后才继续进行。
我做错了什么?在这种情况下,什么是函数调用的正确方法?
答案 0 :(得分:0)
返回值如果NextEvent方法成功,则返回包含所请求事件的SWbemObject对象。如果是电话 超时,返回的对象为NULL并引发错误。
错误代码完成NextEvent方法后,Err对象可能包含以下列表中的错误代码。
wbemErrTimedOut - 0x80043001请求的事件未在iTimeoutMs中指定的时间内到达
https://msdn.microsoft.com/en-us/library/aa393711(v=vs.85).aspx
说,我会按以下方式尝试If evt Is Nothing Then Exit Loop
Do
Set evt = monitor.NextEvent()
If evt Is Nothing Then Exit Do
Select Case evt.Path_.Class
Case "__InstanceCreationEvent"
call SendNotification (evt.TargetInstance)
End Select
Loop
或者
On Error Resume Next
Do
Set evt = monitor.NextEvent()
If Err <> 0 Then
If Err.Number = wbemErrTimedout Then ' = &H80043001
Exit Do
Select Case evt.Path_.Class
Case "__InstanceCreationEvent"
call SendNotification (evt.TargetInstance)
End Select
Loop