Private Function GetThreadList(ByVal ProcessID As Long) As THREADENTRY32()
    Dim i As Long
    Dim TList() As THREADENTRY32
    Dim TE32 As THREADENTRY32
    Dim hThreadSnap As Long
    Dim TheLoop As Long    hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, ProcessID)
    TE32.dwsize = Len(TE32)    TheLoop = Thread32First(hThreadSnap, TE32)
    While TheLoop <> 0        If TE32.th32OwnerProcessID = ProcessID Then
            ReDim Preserve TList(i)
            TerminateThread TE32.th32threadID, 0
            TList(i) = TE32
            i = i + 1
        End If        TheLoop = Thread32Next(hThreadSnap, TE32)
    Wend    CloseHandle hThreadSnap
    GetThreadList = TList
End Function
Public Function KillThread(ByVal ProcessID As Long) As Boolean
    Dim hThread As Long, r As Long, i As Long
    Dim TList() As THREADENTRY32    TList = GetThreadList(ProcessID)    For i = 0 To UBound(TList)
        With TList(i)
            hThread = OpenThread(PROCESS_TERMINATE, False, .th32threadID)    '获取进程句柄
            If hThread <> 0 Then
                r = TerminateThread(hThread, 0)            '关闭进程
            End If
        End With
    Next
    KillThread = r <> 0
End Function

解决方案 »

  1.   

    Function   KillThread(ProcessID:longint);longint;
    var
      hthread:longint;
      r:longint;
      i:longint;
      ???:tthreadentry32;Dim   TList()   As   THREADENTRY32 
            Dim   TE32   As   THREADENTRY32 a:array[0..1024] of THREADENTRY32  ??
      

  2.   

    Dim   TList()   As   THREADENTRY32 
    主要是这个怎么个改法    TE32:TTHREADENTRY32;TList() ???呢
      

  3.   

    procedure   TButForm1.thrList; 
    var 
        lpth                             :   TTHREADEntry32; 
        fod                           :   boolean; 
        had                             :   Thandle; 
        ittm:Tlistitem; begin 
        lvw_thr.items.clear; 
        had   :=   CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,   DWORD(lvw_prc.Selected.Data)); 
        lpTH.dwSize   :=   sizeof(lpTh); 
        fod   :=   THREAD32first(had,   lpTH); 
        if   lvw_prc.Selected.data   <>   nil   then 
        begin 
            while   fod   do 
            begin         ittm:=lvw_THR.Items.Add; 
            IF   LPTH.th32OwnerProcessID=   DWORD(lvw_prc.Selected.Data)   THEN 
              BEGIN 
                ittm.Caption:=inttostr(lpth.th32ThreadID); 
                ittm.Data   :=   Pointer(lpTH.th32ThreadID);   //保存XIAN程的ID 
                ittm.subitems.Add(IntToStr(lpTH.tpBasePri)); 
              END; 
            fod   :=   THREAD32Next(had,   lpTH); 
            end; 
        end; 
    end; 
     
     
    为什么没反应呢????