【已解决】结束指定进程目录下的其它进程(注:指定进程不被结束)
本帖最后由 killmus 于 2012-7-7 15:53 编辑While 1
$iPid=ProcessExists("Au3Info.exe")
$path=_GetModuleFileNameEx($iPid)
Local $MonitorDir=StringRegExpReplace($path, '(.+\\)[^\\]+', '\1')
$array=ProcessList()
For $i=1 To $array
If StringInStr(_GetModuleFileNameEx($array[$i]),$MonitorDir) And _GetModuleFileNameEx($array[$i])<>$path Then
ProcessClose($array[$i])
Exit
EndIf
Next
WEnd
Func _GetModuleFileNameEx($_Pid)
$_Hwnd=DllCall("Kernel32.dll","hwnd","OpenProcess","dword",0x0400+0x0010,"int",0,"dword",$_Pid)
$_Return=DllCall("Psapi.dll","long","GetModuleFileNameEx","hwnd",$_Hwnd,"long",0,"str",0,"long",255)
DllCall("Kernel32.dll","int","CloseHandle","hwnd",$_Hwnd)
If StringInStr($_Return,"\") Then Return $_Return
Return ""
EndFunc
以上代码最终整理即可实现结束指定进程名目录及其子目录下的所有exe程序的进程且指定进程不被结束的效果! 检查正则匹配出来的进程名,可能是系统进程被结束了,不过我不懂正则,只是觉得,仅供参考 以前遇到过个程序的进程结束后,会出现重启或蓝屏现象 回复 3# 80ren
我这个代码运行不会蓝屏了,我已经修改了,现在的问题是怎么排除a进程不被结束 第7行改为
If StringInStr(_GetModuleFileNameEx($array[$i]),$MonitorDir) And _GetModuleFileNameEx($array[$i])<>$path Then ProcessClose($array[$i]) $iPid = ProcessExists("et.exe")
$path = _GetModuleFileNameEx($iPid)
;~ MsgBox(0,0,$path)
Local $MonitorDir = StringRegExpReplace($path, '(.+\\)[^\\]+', '\1')
;~ MsgBox(0, 0, $MonitorDir)
While 1
$array = ProcessList()
For $i = 1 To $array
;~ MsgBox(0,0,_GetModuleFileNameEx($array[$i]))
If StringInStr(_GetModuleFileNameEx($array[$i]), $MonitorDir) Then
If ProcessExists($array[$i]) <> $iPid Then ;判断下要结束的进程和被排除的进程PID是否相同
MsgBox(0, 0, $array[$i])
ProcessClose($array[$i])
EndIf
EndIf
Next
Sleep(250)
WEnd
Func _GetModuleFileNameEx($_Pid)
$_Hwnd = DllCall("Kernel32.dll", "hwnd", "OpenProcess", "dword", 0x0400 + 0x0010, "int", 0, "dword", $_Pid)
$_Return = DllCall("Psapi.dll", "long", "GetModuleFileNameEx", "hwnd", $_Hwnd, "long", 0, "str", 0, "long", 255)
DllCall("Kernel32.dll", "int", "CloseHandle", "hwnd", $_Hwnd)
If StringInStr($_Return, "\") Then Return $_Return
Return ""
EndFunc ;==>_GetModuleFileNameEx
本帖最后由 killmus 于 2012-7-7 14:24 编辑
回复 5# zldfsz
谢谢! 回复 7# killmus
去掉第4行和第10行 本帖最后由 user3000 于 2012-7-7 14:33 编辑
回复 1# killmus
第7行前面应该加一行:
If $array[$i] = $iPid Then ContinueLoop
即遍历进程时, 如果是 a.exe 时跳过去! 回复 5# zldfsz
楼主把问题改来改去得利害吧, 不然大师会看走眼至如此而放出5楼的代码? 回复zldfsz
楼主把问题改来改去得利害吧, 不然大师会看走眼至如此而放出5楼的代码?
user3000 发表于 2012-7-7 14:38 http://www.autoitx.com/images/common/back.gif
5楼的代码有什么问题吗 回复 11# zldfsz
汗, 原来看走眼的人是我! (鄙视自己, 似乎一向都这么粗心大意的?)
对不住了, 大师! 回复 5# zldfsz
如果代码运行后进程a才出现的话,你这就失效了 回复 12# user3000
没关系的,我也常常粗心大意。。。 这个 ....不懂正则处理有失误吗?
页:
[1]