找回密码
 加入
搜索
查看: 2424|回复: 5

[AU3基础] 关闭除系统进程外进程问题

[复制链接]
发表于 2010-8-2 23:38:36 | 显示全部楼层 |阅读模式
写了个简单的程序,发现并没有用。。求达人帮忙更改。。
#NoTrayIcon
#Include <Array.au3>

$Processlist=ProcessList()
Dim $sysProlist[13]=["system", "smss.exe","csrss.exe","lsass.exe","svchost.exe", "winlogon.exe","iexplore.exe","services.exe","System Idle Process","explorer.exe","internat.exe", "taskmgr.exe"]

For $i=1 To $Processlist[0][0]
        $a=_ArrayBinarySearch($sysProlist,$Processlist[$i][0])
        If @error=3 Then ProcessClose($Processlist[$i][1])
Next
 楼主| 发表于 2010-8-3 00:08:15 | 显示全部楼层
#NoTrayIcon
#Include <Array.au3>

$Processlist=ProcessList()
Dim $sysProlist[14]=["system", "smss.exe","csrss.exe","lsass.exe","svchost.exe", "winlogon.exe","iexplore.exe","services.exe","System Idle Process","explorer.exe","internat.exe","QQ.exe","client.exe"]
Dim $err[$Processlist[0][0]]
For $i=1 To $Processlist[0][0]
        $tmp=0
        For $b=0 To 13
                If $Processlist[$i][0]=$sysProlist[$b] Then $tmp=1
        Next
        If $tmp=0 Then ProcessClose($Processlist[$i][1])
Next
我用上面方法解决了,但我还是想知道为什么 刚才那样不行

我试了每个进程的@error全是2
发表于 2010-8-3 00:22:07 | 显示全部楼层
本帖最后由 afan 于 2010-8-3 00:24 编辑

_ArrayBinarySearch 必须先排序
用_ArraySearch即可
发表于 2010-8-3 00:34:20 | 显示全部楼层
可以用简单的方法
#NoTrayIcon

$Processlist = ProcessList()
$sysProlist = ';system;smss.exe;csrss.exe;lsass.exe;svchost.exe;winlogon.exe;iexplore.exe;services.exe;System Idle Process;explorer.exe;internat.exe;taskmgr.exe;'

For $i = 1 To $Processlist[0][0]
        If Not StringInStr($sysProlist, ';' & $Processlist[$i][0] & ';') Then MsgBox(0, $Processlist[$i][0], $Processlist[$i][1])
Next
发表于 2010-8-3 11:58:18 | 显示全部楼层
本帖最后由 netegg 于 2010-8-3 12:00 编辑
#include <array.au3>
#include <security.au3>

$tag_WTS_PROCESS_INFO= _
  "DWORD SessionId;" & _
  "DWORD ProcessId;" & _
  "PTR pProcessName;" & _
  "PTR pUserSid"

; ############ Example code #######################
MsgBox(0,"Process by name or number(PID)", "Explorer.exe------" & _ProcessListOWNER_WTS("Explorer.exe"))
$temp=_ProcessListOWNER_WTS()
$temp[0][0]="Process"
$temp[0][1]="ProcessId"
$temp[0][2]="SessionId"
$temp[0][3]="ProcessOWNER"
_ArrayDisplay($temp, "Process list with OWNER...")
; ###############################################


; ############ Here be func! ####################
Func _ProcessListOWNER_WTS($PID=0)
    Local $i, $ret, $ret1, $mem
    $ret=DllCall("WTSApi32.dll", "int", "WTSEnumerateProcesses", "int", 0, "int", 0, "int", 1, "ptr*", 0, "int*", 0)
    Local $array[$ret[5]][4]
    $mem=DllStructCreate($tag_WTS_PROCESS_INFO,$ret[4])
    for $i=0 to $ret[5]-1
        $mem=DllStructCreate($tag_WTS_PROCESS_INFO, $ret[4]+($i*DllStructGetSize($mem)))
        ;if DllStructGetData($mem, "pProcessName") Then
            $string=DllStructCreate("char[256]", DllStructGetData($mem, "pProcessName"))
            $array[$i][0]=DllStructGetData($string,1)
        ;EndIf
        $array[$i][1]=DllStructGetData($mem, "ProcessId")
        $array[$i][2]=DllStructGetData($mem, "SessionId")
        ;if DllStructGetData($mem, "pUserSid") Then
            $ret1 = _Security__LookupAccountSid(DllStructGetData($mem, "pUserSid"))
            if IsArray($ret1) Then $array[$i][3]=$ret1[0]
        ;EndIf
    Next
    
    DllCall("WTSApi32.dll", "int", "WTSFreeMemory", "int", $ret[4])
    
    if $PID Then
        if IsInt($PID) Then
            for $i=0 to UBound($array, 1) - 1
                if $array[$i][1] = $PID Then
                    Return $array[$i][3]
                EndIf
            Next
        Else
            for $i=0 to UBound($array, 1) - 1
                if $array[$i][0] = $PID Then
                    Return $array[$i][3]
                EndIf
            Next
        EndIf
    EndIf
    
    Return $array
EndFunc
;################################ END FUNC ##########################################
 
发表于 2010-8-3 13:48:11 | 显示全部楼层
呵呵,学习一下哈。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 00:55 , Processed in 0.089389 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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