怎样用VB获取当前系统进程名????? 要求:

2025-03-05 04:51:49
推荐回答(1个)
回答1:

Option Explicit

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
Private Declare Function GetModuleFileNameEx Lib "PSAPI.DLL" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long

Const PROCESS_QUERY_INFORMATION = &H400
Const PROCESS_VM_READ = &H10
Const MAX_PATH As Long = 260

Private Sub Command1_Click()
Dim szProcessName As String
Dim aProcesses() As Long
Dim hMod(0 To 1023) As Long
Dim hProcess As Long
Dim lLen As Long
Dim cbNeeded As Long
Dim cProcesses As Long
Dim lProcessID As Long
Dim K
Dim i As Long
ReDim aProcesses(0 To 1023) As Long
K = List1.ListIndex
List1.Clear
If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded) <> 0) Then
cProcesses = cbNeeded / 4
For i = 0 To cProcesses - 1
lProcessID = aProcesses(i)
lLen = MAX_PATH
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcessID)
If (lProcessID = 0) Then
List1.AddItem "System Idle Process"
ElseIf lProcessID < 5 Then
List1.AddItem "System"
Else
If (hProcess <> 0) Then
If (EnumProcessModules(hProcess, hMod(0), 1024 * 4, cbNeeded)) Then
szProcessName = String$(lLen, 0)
LSet szProcessName = "unknown"
GetModuleFileNameEx hProcess, hMod(0), szProcessName, lLen
List1.AddItem szProcessName
End If
End If
End If
Next i
If K < 2 Or K > List1.ListCount - 1 Then K = List1.ListCount - 1
List1.ListIndex = K
Else
MsgBox "Failed to get process list.", vbCritical
End If

End Sub