我试了下有时候可以有时候不可以 真是很奇怪代码如下 模块代码 Private Declare Function Thread32First Lib "kernel32.dll" (ByVal hSnapShot As Long, ByRef lpte As THREADENTRY32) As Boolean Private Declare Function Thread32Next Lib "kernel32.dll" (ByVal hSnapShot As Long, ByRef lpte As THREADENTRY32) As BooleanPublic Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Boolean, ByVal dwThreadId As Long) As Long Public Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As Long) As Long Public Declare Function TerminateThread Lib "kernel32.dll" (ByVal hThread As Long, ByVal dwExitCode As Long) As Boolean Public Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As Long) As LongPublic Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Public Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As LongPublic Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * 260 End Type Public Type THREADENTRY32 dwSize As Long cntUsage As Long th32ThreadID As Long th32OwnerProcessID As Long tpBasePri As Long tpDeltaPri As Long dwFlags As Long End TypePublic Const THREAD_SUSPEND_RESUME As Long = &H2Public ProcessId() As PROCESSENTRY32 Public Thread() As THREADENTRY32Public Const LB_SETHORIZONTALEXTENT = &H194 Public Const TH32CS_SNAPheaplist = &H1 Public Const TH32CS_SNAPPROCESS = &H2 Public Const TH32CS_SNAPthread = &H4 Public Const TH32CS_SNAPmodule = &H8 Public Const TH32CS_INHERIT = &H80000000 Public Const TH32CS_SNAPall = (TH32CS_SNAPheaplist Or TH32CS_SNAPPROCESS Or TH32CS_SNAPthread Or TH32CS_SNAPmodule)Public Function Thread32_Enum(ByRef Thread() As THREADENTRY32, lProcessID As Long) As Long ReDim Thread(0) Dim THREADENTRY32 As THREADENTRY32 Dim hSnapShot As Long Dim lThread As Long hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPthread, lProcessID) THREADENTRY32.dwSize = Len(THREADENTRY32) If Thread32First(hSnapShot, THREADENTRY32) = False Then Thread32_Enum = -1 Exit Function Else ReDim Thread(lThread) Thread(lThread) = THREADENTRY32 End IfDo If Thread32Next(hSnapShot, THREADENTRY32) = False Then Exit Do Else lThread = lThread + 1 ReDim Preserve Thread(lThread) Thread(lThread) = THREADENTRY32 End If Loop Thread32_Enum = lThread End Function窗口代码 Private Sub Command1_Click() l = List2.ListCount If MsgBox("挂起整个进程将挂起所有的进程,确定要挂起??", vbDefaultButton2 + vbOKCancel + vbQuestion, "挂起进程") = vbOK Then For i = 0 To l - 1 Thread_Suspend List2.List(i) Next End If End SubPrivate Sub Form_Load() TList End SubPrivate Sub List1_Click() '线程列表 List2.Clear For i = 0 To Thread32_Enum(Thread(), ProcessId(List1.ListIndex).th32ProcessID) If Thread(i).th32OwnerProcessID = ProcessId(List1.ListIndex).th32ProcessID Then List2.AddItem Thread(i).th32ThreadID End If Next i End SubPrivate Sub List2_DblClick() PopupMenu Threads End SubPrivate Sub ResumeT_Click() If List2.Selected(i) Then Thread_Resume List2.List(List2.ListIndex) End If End SubPrivate Sub Suspend_Click() If MsgBox("挂起线程可能导致该程序出错,确定要挂起??", vbDefaultButton2 + vbOKCancel + vbQuestion, "挂起线程") = vbOK Then If List2.Selected(i) Then Thread_Suspend List2.List(List2.ListIndex) End If End If End Sub Function Thread_Suspend(T_ID As Long) As Long '挂起线程 Dim hThread As Long hThread = OpenThread(THREAD_SUSPEND_RESUME, False, T_ID) Thread_Suspend = SuspendThread(hThread) End FunctionFunction Thread_Resume(T_ID As Long) As Long '恢复线程 Dim hThread As Long Dim lSuspendCount As Long hThread = OpenThread(THREAD_SUSPEND_RESUME, False, T_ID) Thread_Resume = ResumeThread(hThread) End FunctionPublic Sub TList() Dim i As Integer Dim theloop As Long, snap As Long Dim Proc As PROCESSENTRY32 List1.Clear '清空内容 List2.Clear snap = CreateToolhelp32Snapshot(TH32CS_SNAPall, 0) '获得进程"快照"的句柄 Proc.dwSize = Len(Proc) theloop = Process32First(snap, Proc) '获取第一个进程,并得到其返回值 While theloop <> 0 '当返回值非零时继续获取下一个进程 List1.AddItem Proc.szExeFile ReDim Preserve ProcessId(i) ProcessId(i).th32ProcessID = Proc.th32ProcessID ProcessId(i).cntThreads = Proc.cntThreads ProcessId(i).th32ParentProcessID = Proc.th32ParentProcessID i = i + 1 theloop = Process32Next(snap, Proc) Wend CloseHandle snap '关闭进程"快照"句柄 End Sub
真是很奇怪代码如下
模块代码
Private Declare Function Thread32First Lib "kernel32.dll" (ByVal hSnapShot As Long, ByRef lpte As THREADENTRY32) As Boolean
Private Declare Function Thread32Next Lib "kernel32.dll" (ByVal hSnapShot As Long, ByRef lpte As THREADENTRY32) As BooleanPublic Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Boolean, ByVal dwThreadId As Long) As Long
Public Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As Long) As Long
Public Declare Function TerminateThread Lib "kernel32.dll" (ByVal hThread As Long, ByVal dwExitCode As Long) As Boolean
Public Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As Long) As LongPublic Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Public Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As LongPublic Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Public Type THREADENTRY32
dwSize As Long
cntUsage As Long
th32ThreadID As Long
th32OwnerProcessID As Long
tpBasePri As Long
tpDeltaPri As Long
dwFlags As Long
End TypePublic Const THREAD_SUSPEND_RESUME As Long = &H2Public ProcessId() As PROCESSENTRY32
Public Thread() As THREADENTRY32Public Const LB_SETHORIZONTALEXTENT = &H194
Public Const TH32CS_SNAPheaplist = &H1
Public Const TH32CS_SNAPPROCESS = &H2
Public Const TH32CS_SNAPthread = &H4
Public Const TH32CS_SNAPmodule = &H8
Public Const TH32CS_INHERIT = &H80000000
Public Const TH32CS_SNAPall = (TH32CS_SNAPheaplist Or TH32CS_SNAPPROCESS Or TH32CS_SNAPthread Or TH32CS_SNAPmodule)Public Function Thread32_Enum(ByRef Thread() As THREADENTRY32, lProcessID As Long) As Long
ReDim Thread(0)
Dim THREADENTRY32 As THREADENTRY32
Dim hSnapShot As Long
Dim lThread As Long
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPthread, lProcessID)
THREADENTRY32.dwSize = Len(THREADENTRY32)
If Thread32First(hSnapShot, THREADENTRY32) = False Then
Thread32_Enum = -1
Exit Function
Else
ReDim Thread(lThread)
Thread(lThread) = THREADENTRY32
End IfDo
If Thread32Next(hSnapShot, THREADENTRY32) = False Then
Exit Do
Else
lThread = lThread + 1
ReDim Preserve Thread(lThread)
Thread(lThread) = THREADENTRY32
End If
Loop
Thread32_Enum = lThread
End Function窗口代码
Private Sub Command1_Click()
l = List2.ListCount
If MsgBox("挂起整个进程将挂起所有的进程,确定要挂起??", vbDefaultButton2 + vbOKCancel + vbQuestion, "挂起进程") = vbOK Then
For i = 0 To l - 1
Thread_Suspend List2.List(i)
Next
End If
End SubPrivate Sub Form_Load()
TList
End SubPrivate Sub List1_Click() '线程列表
List2.Clear
For i = 0 To Thread32_Enum(Thread(), ProcessId(List1.ListIndex).th32ProcessID)
If Thread(i).th32OwnerProcessID = ProcessId(List1.ListIndex).th32ProcessID Then
List2.AddItem Thread(i).th32ThreadID
End If
Next i
End SubPrivate Sub List2_DblClick()
PopupMenu Threads
End SubPrivate Sub ResumeT_Click()
If List2.Selected(i) Then
Thread_Resume List2.List(List2.ListIndex)
End If
End SubPrivate Sub Suspend_Click()
If MsgBox("挂起线程可能导致该程序出错,确定要挂起??", vbDefaultButton2 + vbOKCancel + vbQuestion, "挂起线程") = vbOK Then
If List2.Selected(i) Then
Thread_Suspend List2.List(List2.ListIndex)
End If
End If
End Sub
Function Thread_Suspend(T_ID As Long) As Long '挂起线程
Dim hThread As Long
hThread = OpenThread(THREAD_SUSPEND_RESUME, False, T_ID)
Thread_Suspend = SuspendThread(hThread)
End FunctionFunction Thread_Resume(T_ID As Long) As Long '恢复线程
Dim hThread As Long
Dim lSuspendCount As Long
hThread = OpenThread(THREAD_SUSPEND_RESUME, False, T_ID)
Thread_Resume = ResumeThread(hThread)
End FunctionPublic Sub TList()
Dim i As Integer
Dim theloop As Long, snap As Long
Dim Proc As PROCESSENTRY32
List1.Clear '清空内容
List2.Clear
snap = CreateToolhelp32Snapshot(TH32CS_SNAPall, 0) '获得进程"快照"的句柄
Proc.dwSize = Len(Proc)
theloop = Process32First(snap, Proc) '获取第一个进程,并得到其返回值
While theloop <> 0 '当返回值非零时继续获取下一个进程
List1.AddItem Proc.szExeFile
ReDim Preserve ProcessId(i)
ProcessId(i).th32ProcessID = Proc.th32ProcessID
ProcessId(i).cntThreads = Proc.cntThreads
ProcessId(i).th32ParentProcessID = Proc.th32ParentProcessID
i = i + 1
theloop = Process32Next(snap, Proc)
Wend
CloseHandle snap '关闭进程"快照"句柄
End Sub
我怎么试都没办法关,而且开机也很快啊
我再给你一篇文章
http://www.csdn.net/develop/article/11/11776.shtm
我发那个连接之前试了好多次都没问题的