Hi All,
Just wondering if there is a way to find the CPU and Memory usage of a particular process from the code below?
(Win2K Taskmanager style.)
Thanks a million in advance,
Scott
Code:Private Sub ListProcesses() Dim dl& Dim varray As Variant Dim FinStr As String List1.Clear 'dl = GetVersion() Select Case WinVersion Case 1, 2, 3 'Windows 95/98/ME Dim f As Long, sname As String Dim hSnap As Long, proc As PROCESSENTRY32 hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) 'hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD,0) If hSnap = hNull Then Exit Sub proc.dwSize = Len(proc) ' Iterate through the processes f = Process32First(hSnap, proc) Do While f sname = Str(proc.szExeFile) 'Debug.Print proc.th32ModuleID With List1 .AddItem LCase$(sname) .ItemData(.NewIndex) = proc.th32ProcessID End With f = Process32Next(hSnap, proc) Loop Case Else 'Windows NT4/2000/XP Dim cb&, cbNeeded&, NumElements& Dim ProcessIDs&() Dim cbNeeded2&, NumElements2& Dim Modules&(1 To 200), lRet& Dim ModuleName$ Dim nSize&, hProcess&, i& 'Get the array containing the process id's for each process object cb = 8 cbNeeded = 96 Do While cb <= cbNeeded cb = cb * 2 ReDim ProcessIDs(cb / 4) As Long lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded) Loop NumElements = cbNeeded / 4 For i = 1 To NumElements 'Get a handle to the Process hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i)) 'Got a Process handle If hProcess <> 0 Then 'Get an array of the module handles for the specified process lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2) 'If the Module Array is retrieved, get the ModuleFileName If lRet <> 0 Then ModuleName = Space(MAX_PATH) nSize = 500 lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize) With List1 varray = Split(ModuleName, "\") If Len(Str(ProcessIDs(i))) = 4 Then FinStr = " " + Str(ProcessIDs(i)) + " " + varray(UBound(varray)) .AddItem FinStr .ItemData(.NewIndex) = ProcessIDs(i) ElseIf Len(Str(ProcessIDs(i))) > 4 Then FinStr = " " + Str(ProcessIDs(i)) + " " + varray(UBound(varray)) .AddItem FinStr .ItemData(.NewIndex) = ProcessIDs(i) End If End With End If End If 'Close the handle to the process lRet = CloseHandle(hProcess) Next End Select With List1 If Plc = .ListCount Then If .ListCount > 0 Then .ListIndex = Plc - 1 Else If .ListCount > 0 Then .ListIndex = Plc End If End With End Sub




Reply With Quote