找回密码
 加入
搜索
查看: 6969|回复: 11

[AU3基础] au3本身没有函数结束进程树吗只能调用taskkill吗?[已解决]

  [复制链接]
发表于 2010-8-14 12:42:32 | 显示全部楼层 |阅读模式
本帖最后由 today2004 于 2010-8-15 00:50 编辑

如题,au3本身没有函数结束进程树吗只能调用taskkill吗?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-8-14 13:15:52 | 显示全部楼层
你自己写个函数不就行了?
 楼主| 发表于 2010-8-14 14:31:06 | 显示全部楼层
哈哈 属于菜鸟级别的 不会这么高深的东西 楼上的可否写个例子啊
发表于 2010-8-14 14:50:06 | 显示全部楼层
思路:取进程的父进程ID,如果非系统,则结束之.但如果要从子进程结束树上层就没那么好办了,因为获取子进程好像没有好的方法,也没见过有这个API,但变通一下思路还是可以的,最后还是要从父进程从手.
btw:2#就写过一个获取父进程的获取
发表于 2010-8-14 15:46:49 | 显示全部楼层
既然获取父进程已经有了实现代码,那枚举子进程不也是一样的吗? - -|||
 楼主| 发表于 2010-8-14 17:30:17 | 显示全部楼层
ProcessExists ( "进程" ) 可以获取指定进程的PID 但是怎么枚举他的子进程了
发表于 2010-8-14 20:04:39 | 显示全部楼层
_WinAPI_EnumChildProcess
发表于 2010-8-14 21:31:45 | 显示全部楼层
#include <Thread.au3>

$iTopNode = ProcessExists("cmd.exe")
_TerminateProcessTree($iTopNode)

Func _TerminateProcessTree($iTopNodePid, $iReserved = 0)
        If Not ProcessExists($iTopNodePid) Then Return 0

        If ($iReserved) Then
                Local $aProcess = Eval($iReserved & $iTopNodePid)
                If ($aProcess) Then
                        $aProcess = StringSplit($aProcess, ",")
                        For $i = 1 To $aProcess[0] - 1
                                _TerminateProcessTree($aProcess[$i], $iReserved)
                        Next
                EndIf
                Return ProcessClose($iTopNodePid)
        Else
                Local $pBuffer, $pBuffer1, $iSizeofBuffer
                Local $iOffset, $iPid, $iParentId, $sRandom

                _RTQuerySystemInformation(5, 0, 0)
                $iSizeofBuffer = @Extended
                $pBuffer = _RTHeapAlloc(@Extended)
                _RTQuerySystemInformation(5, $pBuffer, $iSizeofBuffer)
                $pBuffer1 = $pBuffer
                $sRandom = Random(10000, 10000000) & Random(10000, 10000000) & ","

                While 1
                        $iOffset = _RTReadBytes($pBuffer)
                        $iPid = _RTReadBytes($pBuffer + 68)
                        $iParentId = _RTReadBytes($pBuffer + 72)

                        Assign($sRandom & $iParentId, Eval($sRandom & $iParentId) & $iPid & ",", 2)
                        If ($iOffset) Then
                                $pBuffer += $iOffset
                        Else
                                ExitLoop
                        EndIf
                WEnd
                _RTHeapFree($pBuffer1)
                Return _TerminateProcessTree($iTopNodePid, $sRandom)
        EndIf
EndFunc        ;==>_TerminateProcessTree

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1贡献 +5 收起 理由
afan + 5

查看全部评分

 楼主| 发表于 2010-8-15 00:30:18 | 显示全部楼层
感谢 我试试
发表于 2010-8-16 16:22:18 | 显示全部楼层
呵呵,学习一下。。
发表于 2010-8-16 18:56:59 | 显示全部楼层
回复 1# today2004


    请问楼Z。问题怎么解决的。把代码放出来大家分享一下啊。
发表于 2012-1-11 07:13:20 | 显示全部楼层
回复 1# today2004


    怎么解决进程树的问题的啊?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 20:20 , Processed in 0.094598 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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