today2004 发表于 2010-8-14 12:42:32

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

本帖最后由 today2004 于 2010-8-15 00:50 编辑

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

pusofalse 发表于 2010-8-14 13:15:52

你自己写个函数不就行了?

today2004 发表于 2010-8-14 14:31:06

哈哈 属于菜鸟级别的 不会这么高深的东西 楼上的可否写个例子啊

ceoguang 发表于 2010-8-14 14:50:06

思路:取进程的父进程ID,如果非系统,则结束之.但如果要从子进程结束树上层就没那么好办了,因为获取子进程好像没有好的方法,也没见过有这个API,但变通一下思路还是可以的,最后还是要从父进程从手.
btw:2#就写过一个获取父进程的获取

pusofalse 发表于 2010-8-14 15:46:49

既然获取父进程已经有了实现代码,那枚举子进程不也是一样的吗? - -|||

today2004 发表于 2010-8-14 17:30:17

ProcessExists ( "进程" ) 可以获取指定进程的PID 但是怎么枚举他的子进程了

netegg 发表于 2010-8-14 20:04:39

_WinAPI_EnumChildProcess

pusofalse 发表于 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 - 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

today2004 发表于 2010-8-15 00:30:18

感谢 我试试

menfan1 发表于 2010-8-16 16:22:18

呵呵,学习一下。。

xsjtxy 发表于 2010-8-16 18:56:59

回复 1# today2004


    请问楼Z。问题怎么解决的。把代码放出来大家分享一下啊。

freedom 发表于 2012-1-11 07:13:20

回复 1# today2004


    怎么解决进程树的问题的啊?
页: [1]
查看完整版本: au3本身没有函数结束进程树吗只能调用taskkill吗?[已解决]