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
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
var
hthread:longint;
r:longint;
i:longint;
???:tthreadentry32;Dim TList() As THREADENTRY32
Dim TE32 As THREADENTRY32 a:array[0..1024] of THREADENTRY32 ??
主要是这个怎么个改法 TE32:TTHREADENTRY32;TList() ???呢
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;
为什么没反应呢????