Board logo

标题: 求一个vbs监视脚本! [打印本页]

作者: wfyinghun     时间: 2009-12-14 10:47    标题: 求一个vbs监视脚本!
求这样一个功能的vbs(以前在那里看到过,现在实在找不到了!):
每当打开一个程序的时候,检查该程序是不是文本文件中规定的程序,是的话就关闭它!(好象要用到wmi里的一个什么创建事件)。

作者: mountvol     时间: 2009-12-14 12:47
同步的:
    sProcess = "iexplore.exe"
Set oWMI = GetObject("Winmgmts:")
Set oExec = oWMI.ExecNotificationQuery( _
"Select * From __instanceCreationEvent " & _
"WithIn 1 Where TargetInstance ISA 'Win32_Process'")
Do
Set oNextEvent = oExec.NextEvent
sName = oNextEvent.TargetInstance.Name
If sProcess = LCase(sName) Then
MsgBox sName
End If
Loop

不过不好用,可能会漏,还不如自己查询:
Do
For Each x In GetObject("Winmgmts:Win32_Process").Instances_
If "iexplore.exe" = LCase(x.Name) Then
WScript.Echo x.Name
End If
Next
WScript.Sleep 200
Loop

这个我在CSDN也帮人解答过,刚好直接转过来。

作者: lyllck1     时间: 2009-12-14 13:07
奸视什么???

作者: wfyinghun     时间: 2009-12-14 14:31    标题: 谢谢,解决了!
thanks,我试过了,这2个脚本都能实现,不过第二个脚本占用cpu资源比第一个高多了!

作者: mountvol     时间: 2009-12-14 16:15
Originally posted by wfyinghun at 2009-12-14 14:31:
thanks,我试过了,这2个脚本都能实现,不过第二个脚本占用cpu资源比第一个高多了!

因为第二个sleep的时间比较短,另外每次执行的时候要重新查询,当然资源高一些.
你可以把sleep更改为1000,每1秒查询一次,那样会低一些.

作者: mountvol     时间: 2009-12-14 16:27

Set oWMI = GetObject("Winmgmts:")
Set oRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colProcess = oRefresher.AddEnum(oWMI,"Win32_Process").ObjectSet

Do
oRefresher.Refresh
For Each x In colProcess
WScript.Echo x.Name
Next
WScript.Sleep 200
Loop

试试这个,理论上来说应该比那个要节省一些资源,sleep时间你可以自己调整。

作者: wfyinghun     时间: 2009-12-14 22:32    标题: 弱弱问一下
以前学的东西忘了很多了,弱弱的问一下,怎么样修改代码使它结束进程而不是显示进程名字,把MsgBox sName或者wscript echo x.name 换成什么?

作者: wfyinghun     时间: 2009-12-14 22:36    标题: 记起来了!
Originally posted by wfyinghun at 2009-12-14 10:32 PM:
以前学的东西忘了很多了,弱弱的问一下,怎么样修改代码使它结束进程而不是显示进程名字,把MsgBox sName或者wscript echo x.name 换成什么?



呵呵,我已经记起来了,用terminate方法!