永发信息网

用那个API函数能遍历进程

答案:2  悬赏:70  手机版
解决时间 2021-02-06 00:36
我想在我的程序中加入遍历进程的代码
是哪个API函数?
顺便问一下
请给出ShellExecute的具体用法,最好还有例子,谢谢了
最佳答案
第一段,可以取得当前进程列表

'模块
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

'该函数是EnumWindows的回调函数,EnumWindows函数将遍历的窗口句柄传递到hwnd参数中
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim astr As String * 256
Dim l As Long

l = GetWindowText(hwnd, astr, Len(astr))
If InStr(astr, " ") > 1 Then
Form1.List1.AddItem astr
End If
EnumWindowsProc = True
End Function

'窗体
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Sub Command1_Click()
Dim l As Long
List1.Clear
'遍历所有的窗口
l = EnumWindows(AddressOf EnumWindowsProc, 0)
End Sub

第二段,可以取到进程的路径

CSDN _ FAQ列表 _ 基础类 _ VB 与 API

Q : 如何列举所有正在运行的进程?
主要解答者: SoHo_Andy 提交人: leonhome
感谢: SoHo_Andy、rainstormmaster、wu_yongcai
审核者: online 论坛对应贴子: 查看
A :

:)

---------------------------------------------------------------

模块:
Option Explicit
Public Declare Function Process32First Lib "kernel32" ( _
ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function Process32Next Lib "kernel32" ( _
ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function CloseHandle Lib "Kernel32.dll" _
(ByVal Handle As Long) As Long
Public Declare Function OpenProcess Lib "Kernel32.dll" _
(ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, _
ByVal dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "psapi.dll" _
(ByRef lpidProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long
Public Declare Function GetModuleFileNameExA Lib "psapi.dll" _
(ByVal hProcess As Long, ByVal hModule As Long, _
ByVal ModuleName As String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "psapi.dll" _
(ByVal hProcess As Long, ByRef lphModule As Long, _
ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" ( _
ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Public Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Public Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long ' This process
th32DefaultHeapID As Long
th32ModuleID As Long ' Associated exe
cntThreads As Long
th32ParentProcessID As Long ' This process's parent process
pcPriClassBase As Long ' Base priority of process threads
dwFlags As Long
szExeFile As String * 260 ' MAX_PATH
End Type
Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long '1 = Windows 95.
'2 = Windows NT
szCSDVersion As String * 128
End Type
Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const MAX_PATH = 260
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
'STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Public Const PROCESS_ALL_ACCESS = &H1F0FFF
Public Const TH32CS_SNAPPROCESS = &H2&
Public Const hNull = 0

Function StrZToStr(s As String) As String
StrZToStr = Left$(s, Len(s) - 1)
End Function

Public Function getVersion() As Long
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
getVersion = osinfo.dwPlatformId
End Function

窗体:(一个按钮,一个listbox,如果不需要显示可设为不可见)
Option Explicit

Private Sub Command1_Click()
List1.Clear
Select Case getVersion()

Case 1 'Windows 95/98

Dim f As Long, sname As String
Dim hSnap As Long, proc As PROCESSENTRY32
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If hSnap = hNull Then Exit Sub
proc.dwSize = Len(proc)
' Iterate through the processes
f = Process32First(hSnap, proc)
Do While f
sname = StrZToStr(proc.szExeFile)
List1.AddItem sname
f = Process32Next(hSnap, proc)
Loop

Case 2 'Windows NT

Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded2 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long
'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)
List1.AddItem Left(ModuleName, lRet)
End If
End If
'Close the handle to the process
lRet = CloseHandle(hProcess)
Next

End Select
MsgBox IsRun("winamp的路径")
End Sub

Private Function IsRun(ByVal filename As String) As Boolean
Dim i As Long
IsRun = False
For i = 1 To List1.ListCount
Debug.Print List1.List(i)
If List1.List(i) = UCase(filename) Then

IsRun = True
Exit Function
End If
Next

End Function

===============
全部回答
罗云斌的《windows下32位汇编语言设计》有详解
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
衣管家洗衣店(绯桃路23号衣管家洗衣店)地址在
衣莱美洗衣(小板桥小区24幢衣莱美洗衣)地址有
得了肾病怎么办
团香弄玉的意思是什么啊?知道的请说下!
【Pearls】Doyouhaveanypearlsofwisdom?怎么
杨浦区大学生(青年)创业园我想知道这个在什么
求100句经典名言,
准备毕业,要做纪念册,帮我想个题目
衣生缘干洗地址好找么,我有些事要过去
iphone6p开关机建不起用,换了排线还是不能用
舒尔PGA58LC动圈有线演出话筒怎么样,好用吗
皮尔·卡丹&华伦天奴在哪里啊,我有事要去这
黄体萎缩不全出血是因为A.内膜缺乏雌孕激素的
美甲美婕纹绣工作室地址在什么地方,我要处理
香港可以带抗D免疫球蛋白疫苗回国吗?
推荐资讯
女朋友说她自己很坏!
win10系统电脑开不了机 并且自动修复不了 又
读“某地地形剖面示意图”,回答下列问题。(1
联想笔记本win10怎么设置U盘为第一启动
乡村基资阳建设北路餐厅在哪里啊,我有事要去
大路口农贸市场我想知道这个在什么地方
风神S30显示器调到平均油耗后过不了多久就变
大荔的意思是什么啊?知道的请说下!
鲶鱼吃了比自己大的泥鳅,咽不下去了,有一截
烟台毓璜顶医院怎么去啊,有知道地址的么
(12分)中外教育史表明,教育内容变革与社会
法缘的意思是什么啊?知道的请说下!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?