VBS中使用WMI事件处理监控系统进程
OA项目中遇到这样一个问题:用户起草一种类型的公文,编辑word正文时希望能够将公文中的一些内容自动带到正文中,这个无非就是从服务器上把公文所对应的word正文文件下载到本地,替换掉里面指定内容的事,问题的关键在于替换掉内容后,或者用户填写了内容后,关闭word文件,如何监听此事件以在word程序退出后将此文件上传到服务器,不然,用户岂不是只是在本地做了修改,毫无用处。google了很久,终于解决了此问题,过程如下:<html><body C://Temp/" + 34567 + ".doc");replacefile();wordlistener();"></body></html><script language="javascript">//根据公文ID下载文件function download(objID){doDownload(objID);}function upload(filepath){doUpload(filepath);}</script><script language="vbscript">'定义变量 开始'定义操作word文件的相关变量Dim myDocAppDim myDocDim objSelectionDim wordfilepath'定义变量 结束'初始化 开始'设置操作word文件的相关变量function init(filepath)Set myDocApp = CreateObject("Word.Application")myDocApp.Visible = TruemyDocApp.ActivatemyDocApp.Application.ScreenUpdating = Falseset myDoc = myDocApp.Documents.Open(filepath)Set objSelection = myDocApp.SelectionSet wordfilepath = filepathend function'初始化 结束'替换文件使用VBS 开始'对下载到本地的公文模板进行内容替换function replacefile()replace "#departname#","办公室"replace "#username#","张三"replace "#createDate#","2009-12-17"end function'替换文件使用VBS 结束'替换函数 开始function replace(text,replacetext) With objSelection.Find .Text = text .Replacement.Text = replacetext .Forward = True .Wrap = 1 .Execute ,,,,,,,,,,2 End Withend function'替换函数 结束 '监听系统进程的函数 开始function wordlistener()strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set objEventSource = objWMIService.ExecNotificationQuery _ ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'")Do While True Set objEventObject = objEventSource.NextEvent() If Ucase(Left(objEventObject.TargetInstance.Name, 7)) = "WINWORD" Then Select Case objEventObject.Path_.Class '如果是打开 'Case "__InstanceCreationEvent" '在这里添加事件处理代码 '如果是关闭 Case "__InstanceDeletionEvent" '在这里添加事件处理代码 上传文件 upload wordfilepath Exit Do End Select End IfLoopend function'监听系统进程的函数 结束 </script>
页:
[1]