cxq7668 发表于 2017-2-28 09:18:44

如何根据进程的句柄数多少来结束进程

高手指点,例如我开了20个QQ,其中有几个已经卡机了,句柄数只有200多了,正常是1000,我就把这句柄数只有200多的qq进程给结束了,谢谢大神指点

mars0916 发表于 2017-2-28 12:54:04

回复 1# cxq7668
$kill = "QQ.exe"
Dim $Processlist = ProcessList()
For $i = 1 To $Processlist
      If StringInStr($kill, $Processlist[$i]) > 0 AND $Processlist[$i] < 200 Then ProcessClose($Processlist[$i])
Next

cxq7668 发表于 2017-2-28 13:29:43

回复 2# mars0916


    多谢大神,我试试去

cxq7668 发表于 2017-2-28 13:53:31

回复 2# mars0916


    大神这个 ProcessList()这个函数获取不到进程的句柄数啊,只有pid值啊

mars0916 发表于 2017-2-28 16:02:35

回复 4# cxq7668
底下有個例子 你研究看看

不知道是不是你要的

https://www.autoitscript.com/wiki/FAQ#How_can_I_get_a_window_handle_when_all_I_have_is_a_PID.3F

mars0916 发表于 2017-2-28 16:12:27

回复 4# cxq7668
終於知道句柄數是啥了

轉貼的

請自行加判斷
$arProc = ProcessList("QQ.exe")

For $i = 1 to $arProc
    $arStat = ProcessGetStats($arProc[$i], 0)
    If IsArray($arStat) Then
      ConsoleWrite("Process Name: " & $arProc[$i] & " - Handle: " & StringReplace(_ProcessGetHandle($arProc[$i]), @LF, " - ") & @CRLF)
    EndIf
Next

Func _ProcessGetHandle($ioProcName)
    If $ioProcName Then
      Local $sStatus = Run(@ComSpec & " /c WMIC PROCESS WHERE Name='" & $ioProcName & "' GET handlecount", @SystemDir, @SW_HIDE, 8)
      Local $sBuf
      While 1
            $sBuf &= StdoutRead($sStatus)
            If @Error then ExitLoop ; We have lift off, let's move on!
      WEnd
      $sBuf = StringStripCR($sBuf)
      $sBuf = StringRegExpReplace($sBuf, "HandleCount", "")
      $sBuf = StringStripWS($sBuf, 3)
      If StringInStr($sBuf, "No Instance(s) Available.") Then
            ; Just incase we enter a bad process name
            SetError(2)
            Return 0
      EndIf
      Return $sBuf
    Else
      SetError(1)
      Return 0
    EndIf
EndFunc

cxq7668 发表于 2017-2-28 20:31:58

回复 6# mars0916


    好的,我研究一下
谢谢
页: [1]
查看完整版本: 如何根据进程的句柄数多少来结束进程