VBS中使用WMI事件处理监控系统进程

OA项目中遇到这样一个问题:用户起草一种类型的公文,编辑word正文时希望能够将公文中的一些内容自动带到正文中,这个无非就是从服务器上把公文所对应的word正文文件下载到本地,替换掉里面指定内容的事,问题的关键在于替换掉内容后,或者用户填写了内容后,关闭word文件,如何监听此事件以在word程序退出后将此文件上传到服务器,不然,用户岂不是只是在本地做了修改,毫无用处。google了很久,终于解决了此问题,过程如下:

<html>
	<body onload="download(34567);init("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 myDocApp
	Dim myDoc
	Dim objSelection
	Dim wordfilepath
	'定义变量 结束
	
	'初始化 开始
	'设置操作word文件的相关变量
	function init(filepath)
		Set myDocApp = CreateObject("Word.Application")
		myDocApp.Visible = True
		myDocApp.Activate
		myDocApp.Application.ScreenUpdating = False
		set myDoc = myDocApp.Documents.Open(filepath)
		Set objSelection = myDocApp.Selection
		Set wordfilepath = filepath
	end 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 With
  end 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 If
		Loop
	end function
	'监听系统进程的函数 结束 
</script>

发表评论

电子邮件地址不会被公开。 必填项已用*标注