想把当前获取到的所有进程名保存到一个数组中
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If hProcessSnap <> INVALID_HANDLE_VALUE Then
udtProcessQueue.dwSize = Len(udtProcessQueue)
hNextProcess = Process32First(hProcessSnap, udtProcessQueue)
Do While hNextProcess
Debug.Print LCase(Left(udtProcessQueue.szExeFile, InStr(1&, udtProcessQueue.szExeFile, Chr(0&)) - 1&))
hNextProcess = Process32Next(hProcessSnap, udtProcessQueue)
lngProcessCount = lngProcessCount + 1&
Loop
CloseHandle hProcessSnap
End If
如以上代码所示,难道必须先第一遍Do While循环枚举到所有进程数后,用ReDim Preserve astrProcessList(lngProcessCount)修改动态数组的大小,最后再第二遍Do While循环枚举把所有进程名保存到astrProcessList数组中吗?请问还有没有什么更高效的方法呀?
使用Process32Next逐个获取当前系统的所有进程名并保存到数组中时该怎样定义这个数组上下标呢?
答案:2 悬赏:0 手机版
解决时间 2021-03-19 08:45
- 提问者网友:富士山上尢
- 2021-03-18 20:38
最佳答案
- 五星知识达人网友:雾月
- 2021-03-18 21:23
对于这个问题,我平常的处理方法是:
第一种方法:
1、定义字符型变量S,在Do While枚举到每一个进程时,作一次累加:s=s & 进程名 & ","
2、全部进程枚举完毕,使用astrProcessList=split(s,",")一次性把字符串S转换为数组。
第二种方法:
1、声明:
Private Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
2、自定义函数:
Public Function GetProcesses() As Long
Dim lngCbNeeded As Long
Dim lngNumElements As Long, lngRet As Long
ReDim lngProcArr(1024)
lngRet = EnumProcesses(lngProcArr(0), 4 * 1024, lngCbNeeded)
lngNumElements = lngCbNeeded / 4
GetProcesses = lngNumElements - 1
End Function
3、获取进程总数时,调用如下:
dim i as integer
i=GetProcesses
redim astrProcessList(i-1)
经过上述处理后,你就可以在Do While枚举到每一个进程时,直接放入数组即可,而不必ReDim Preserve 。。。
第一种方法:
1、定义字符型变量S,在Do While枚举到每一个进程时,作一次累加:s=s & 进程名 & ","
2、全部进程枚举完毕,使用astrProcessList=split(s,",")一次性把字符串S转换为数组。
第二种方法:
1、声明:
Private Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
2、自定义函数:
Public Function GetProcesses() As Long
Dim lngCbNeeded As Long
Dim lngNumElements As Long, lngRet As Long
ReDim lngProcArr(1024)
lngRet = EnumProcesses(lngProcArr(0), 4 * 1024, lngCbNeeded)
lngNumElements = lngCbNeeded / 4
GetProcesses = lngNumElements - 1
End Function
3、获取进程总数时,调用如下:
dim i as integer
i=GetProcesses
redim astrProcessList(i-1)
经过上述处理后,你就可以在Do While枚举到每一个进程时,直接放入数组即可,而不必ReDim Preserve 。。。
全部回答
- 1楼网友:一袍清酒付
- 2021-03-18 21:54
任务占坑
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯