中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求一个vbs监视脚本! 上一主题 | 下一主题
wfyinghun
初级用户





积分 126
发帖 53
注册 2007-4-3
状态 离线
『楼 主』:  求一个vbs监视脚本!

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

2009-12-14 10:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mountvol
初级用户





积分 186
发帖 117
注册 2006-8-14
状态 离线
『第 2 楼』:  

同步的:
    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也帮人解答过,刚好直接转过来。

   此帖被 +9 点积分       点击查看详情   
评分人:【 moniuming 分数: +9  时间:2009-12-15 09:36


2009-12-14 12:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lyllck1
贫困用户





积分 -5
发帖 7
注册 2009-11-26
状态 离线
『第 3 楼』:  

奸视什么???

2009-12-14 13:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wfyinghun
初级用户





积分 126
发帖 53
注册 2007-4-3
状态 离线
『第 4 楼』:  谢谢,解决了!

thanks,我试过了,这2个脚本都能实现,不过第二个脚本占用cpu资源比第一个高多了!

2009-12-14 14:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mountvol
初级用户





积分 186
发帖 117
注册 2006-8-14
状态 离线
『第 5 楼』:  



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

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

2009-12-14 16:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mountvol
初级用户





积分 186
发帖 117
注册 2006-8-14
状态 离线
『第 6 楼』:  


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时间你可以自己调整。

2009-12-14 16:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wfyinghun
初级用户





积分 126
发帖 53
注册 2007-4-3
状态 离线
『第 7 楼』:  弱弱问一下

以前学的东西忘了很多了,弱弱的问一下,怎么样修改代码使它结束进程而不是显示进程名字,把MsgBox sName或者wscript echo x.name 换成什么?

2009-12-14 22:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wfyinghun
初级用户





积分 126
发帖 53
注册 2007-4-3
状态 离线
『第 8 楼』:  记起来了!



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

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

2009-12-14 22:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: