VBA和VBScript是相似的。对于WMI几乎相同。这里有三个脚本。您还可以将WMI与事件处理程序连接起来,以便您可以拥有多个事件,而不是一个事件,如此处所示。
VB6是可以编译成exe的VBA。 VB6像Office一样承载VBA语言。
InstanceCreationEvent
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\scripts""'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
InstanceModificationEvent
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\scripts""'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
InstanceDeletionEvent
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent= 'Win32_Directory.Name=""c:\\\\scripts""'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
*是* Excel是穷人的编程环境以外的东西吗? –
您明白VBA代表* Visual Basic for Applications *,并且它只能在属于MS Office的应用程序之一的范围内工作?因此,代码**必须在其中一个应用程序中运行**。并且该VBA不能在Excel电子表格或Word文档之外运行,或<在此处插入所有其他Office应用程序>?那因此你不能将它用于独立程序? VBA是* Office应用程序*的穷人编程语言。 –
是的,我明白了。我的直觉是避免将VBA集中在一起,但是客户喜欢它,因此当他们问我“为什么你不用Excel制作一个宏来做这件事?”时,我需要一个坚实的答案。现在我拥有了。 – CodeOwl