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 
主要是这里不太懂... 该如何转化成 DELPHI的格式
        Dim   TList()   As   THREADENTRY32 
        Dim   TE32   As   THREADENTRY32 
就是这两个部分....
 

解决方案 »

  1.   

    这样的代码根本不需要转换~Baidu随处可以找到的delphi使用实例:
    uses TLHelp32;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ProcessName: string;
      ProcessID: integer;
      ListLoop: Boolean;
      FsnapShotHandle: Thandle;
      FProcessEntry32: TProcessEntry32; //对THREADENTRY32也是一样的
    begin
      Fsnapshothandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
      FProcessEntry32.dwsize := SizeOF(FProcessEntry32);
      Listloop := Process32First(FSnapshotHandle, FProcessEntry32);
      while Listloop do begin
        ProcessName := FprocessEntry32.szExeFile;
        ProcessID := FProcessEntry32.th32ProcessID;
    // 我写到列表框中了,你可以根据需要自己改
        listbox1.Items.Add('Process NAME:' + ProcessNAme);
        ListLoop := Process32Next(FSnapshotHandle, FprocessEntry32);
      end;
    end;
      

  2.   

    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;
      

  3.   

    自己搞定了... 郁闷... CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,   UWANTGETTHREADSOWNPROCESSID);