标题: [问题求助] 请改进一步结束进程的VBS代码 [打印本页]
作者: ww0000 时间: 2013-1-22 13:26 标题: 请改进一步结束进程的VBS代码
以下是监控QQ程序并关闭它的代码,但有两个不足:
一是会出现类似病毒提示的“有程序要结束QQ进程,是否允许执行?”,如何去除?
二是不能出现“此程序已禁止运行,5秒后将自动关闭”这样的提示框,
哪位高手能改进?谢谢!- do
- set ws=createobject("wscript.shell")
- dim test
- test=False
- set wing=getobject("winmgmts:\\.\root\cimv2")
- set jincheng=wing.execquery("select * from win32_process where name='QQ.exe'")
- For Each id In jincheng
- test = True
- Next
- If test then
- ws.run"taskkill /im QQ.exe /f /t"
- End If
- wscript.sleep 3000
- loop
复制代码
作者: ww0000 时间: 2013-1-22 16:04
换一台电脑,打开QQ,结果出现这个了,为什么?
作者: batman 时间: 2013-1-22 21:39
本帖最后由 batman 于 2013-1-22 21:58 编辑
- '结束qq并禁止qq运行
- Dim objWMI, objEvents, objEvent
- Set objWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
- Set objEvents = objWMI.ExecNotifiCationQuery _
- ("Select * From __InstanceOperationEvent Within 5 " _
- & "Where TargetInstance Isa 'Win32_Process'")
- Dim objItems, objItem
- Set objItems = objWMI.ExecQuery _
- ("Select * From Win32_Process Where Name='qq.exe'")
- For Each objItem In objItems
- objItem.Terminate
- Next
- Do While True
- Set objEvent = objEvents.NextEvent()
- If LCase(objEvent.TargetInstance.Name) = "qq.exe" Then
- If objEvent.Path_.Class = "__InstanceCreationEvent" _
- Then objEvent.TargetInstance.Terminate
- End If
- Loop
复制代码
作者: ww0000 时间: 2013-1-23 08:15
回复 3# batman
谢谢!!
代码可以用,但是没有提示框,这个有提示框,但没法倒计时!
do
on error resume next
set bag=getobject("winmgmts:\\.\root\cimv2")
set pipe=bag.execquery("select * from win32_process where name='QQ.exe'")
For Each id In pipe
id.terminate
MsgBox "你不能用QQ"
Next
wscript.sleep 500
loop
作者: ww0000 时间: 2013-1-23 08:28
回复 3# batman
或者直接用老师的下半部分也行
Dim objWMI, objEvents, objEvent
Set objWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
Set objEvents = objWMI.ExecNotifiCationQuery _
("Select * From __InstanceOperationEvent Within 5 " _
& "Where TargetInstance Isa 'Win32_Process'")
Do While True
Set objEvent = objEvents.NextEvent()
If LCase(objEvent.TargetInstance.Name) = "qq.exe" Then
If objEvent.Path_.Class = "__InstanceCreationEvent" _
Then objEvent.TargetInstance.Terminate
MsgBox "对不起,你不能用QQ"
End If
Loop
作者: wankoilz 时间: 2013-1-23 09:40
问下3楼代码中 do while true 中true指的是哪个变量?
作者: ww0000 时间: 2013-1-23 09:55
当while中条件为真时(也就是true)循环继续执行。否则循环结束。
作者: batman 时间: 2013-1-23 09:57
回复 6# wankoilz
Do While True..............Loop 永真循环,在这里实际上你可以写成Do.............Loop
作者: wankoilz 时间: 2013-1-23 10:07
原来如此!
还有个问题,我发现如果把查询间隔改长一点比如 within 10 ,那在这10秒钟内打开进程又关闭的话,脚本检测不出事件的发生……事件是如何被记录和查询的呢?
作者: batman 时间: 2013-1-23 11:52
Set objEvent = objEvents.NextEvent()
这句告诉脚本暂停并直到下一个新建/修改/删除事件发生
作者: wankoilz 时间: 2013-1-23 12:32
感谢回复,具体我是这个意思:
比如我要检测QQ.exe的创建事件,每10秒检测一次。
如果在10秒间隔时间内,我打开QQ.exe再关闭,那么脚本检测不到这个事件;
如果我打开QQ.exe,不关闭,那么间隔时间过后脚本可以检测到事件。
这两种情况下创建事件都发生了,但是为什么后者检测不到呢?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |