找回密码
 加入
搜索
查看: 2481|回复: 7

[系统综合] 进程识别?

  [复制链接]
发表于 2010-9-15 00:27:49 | 显示全部楼层 |阅读模式
系统下面有多个进程名一样的进程(如:svchost,smss).怎么识别出需要的进程PID。
 楼主| 发表于 2010-9-15 00:58:15 | 显示全部楼层
那位帮忙。如果我没有说清楚的话。可以跟帖说声
发表于 2010-9-15 03:10:43 | 显示全部楼层
没明白你说的是什么,没猜错的话,继续枚举线程
发表于 2010-9-15 06:53:09 | 显示全部楼层
PowerTool
可以做到吧
 楼主| 发表于 2010-9-15 10:03:48 | 显示全部楼层
因为是这样的。我这边网吧系统里面被收费软件安装上了广告软件。广告进程是SMSS.exe
跟系统进程是一样的。我现在想用AU3做个脚本结束它。
    进程名一样。我没办法枚举出它是PID呀
发表于 2010-9-15 10:24:41 | 显示全部楼层
运行命令应该可以分辨出区别吧。
#Include <Array.au3>
#Include <WinAPIEx.au3>

Local $svchost[1][3]
$list = ProcessList()
For $i = 1 To $list[0][0]
        If $list[$i][0] = 'svchost.exe' Then
                Redim $svchost[UBound($svchost)+1][3]
                $Data = _WinAPI_GetCommandLineFromPID($list[$i][1])
                $svchost[UBound($svchost)-1][0]=$list[$i][0]
                $svchost[UBound($svchost)-1][1]=$Data
                $svchost[UBound($svchost)-1][2]=$list[$i][1]
                $svchost[0][0]=UBound($svchost)
        EndIf        
Next
_ArrayDisplay($svchost)
发表于 2010-9-15 10:27:54 | 显示全部楼层
根据路径识别就可以了
论坛有WMI获取路径的,你搜搜
发表于 2010-9-16 16:46:12 | 显示全部楼层
我想这个应该适合你,源码好像是三恨写的
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=D:\autoit3\Aut2Exe\Icons\Fonts6.ico
#AutoIt3Wrapper_outfile=Kill_proc.exe
#AutoIt3Wrapper_Res_Comment=根据程序路径结束进程,可结束改名为 smss.exe 的非系统进程。
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#NoTrayIcon
;---------------------------------------------设置使用帮助信息 
If $CmdLine[$CmdLine[0]] = "" then 
Msgbox(4096,"帮助",'参数设置:文件路径必须是完整的' & @CRLF & @CRLF & "例 c:\windows\system32\smss.exe") 
exit 
endif 
;--------------------------------检测是否存在这个文件,不是就自动退出 
if Not FileExists($CmdLine[1]) then 
MsgBox(4096, "错误!", "指定的程序不存在 ,程序将自动退出。") 
exit 
endif


ProcessClosePath($CmdLine[1])     ;程序主体就这一句,调用下面的函数



Func ProcessClosePath($Path)

;作用:根据程序路径结束进程
;返回:当WMI对象不存在,返回错误值1

Local $wbemFlagReturnImmediately
Local $wbemFlagForwardOnly
Local $strComputer,$objWMIService
Local $colItems,$objItem

$strComputer = "localhost"
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$Path= StringReplace($Path,"","\")

$objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Process Where ExecutablePath="'&$Path&'"', "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
   For $objItem In $colItems
     $objItem.Terminate()
   Next
Else
   SetError(1)
Endif

EndFunc
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 20:33 , Processed in 0.081941 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表