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


  Quote:
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    标题: 记起来了!



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

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