枚举进程 - EnumProcess
函数简介
根据指定进程名,枚举系统中符合条件的进程PID,按进程启动顺序排序。该函数可以用于查找特定应用程序的所有运行实例,支持模糊匹配进程名。
接口名称
EnumProcess
DLL调用
long EnumProcess(long ola, string name)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。name
(字符串): 进程名,支持以下格式:- 完整进程名:如"notepad.exe"
- 部分进程名:如"notepad"
- 通配符:如".exe"
- 空字符串:枚举所有进程
示例:
// 枚举所有记事本进程
long strPtr = EnumProcess(ola, "notepad.exe");
if (strPtr != 0) {
char* pidList = (char*)strPtr;
printf("找到记事本进程:%s\n", pidList);
// 解析进程ID列表
char* pid = strtok(pidList, ",");
while (pid != NULL) {
printf("进程ID:%s\n", pid);
pid = strtok(NULL, ",");
}
// 释放内存
FreeStringPtr(strPtr);
}
// 枚举所有Chrome浏览器进程
strPtr = EnumProcess(ola, "chrome.exe");
if (strPtr != 0) {
char* pidList = (char*)strPtr;
printf("找到Chrome进程:%s\n", pidList);
// 解析进程ID列表
char* pid = strtok(pidList, ",");
while (pid != NULL) {
printf("进程ID:%s\n", pid);
pid = strtok(NULL, ",");
}
// 释放内存
FreeStringPtr(strPtr);
}
// 枚举所有进程
strPtr = EnumProcess(ola, "");
if (strPtr != 0) {
char* pidList = (char*)strPtr;
printf("所有进程:%s\n", pidList);
FreeStringPtr(strPtr);
}
COM调用
string EnumProcess(string name)
参数定义:
name
(字符串): 进程名,支持以下格式:- 完整进程名:如"notepad.exe"
- 部分进程名:如"notepad"
- 通配符:如"*.exe"
- 空字符串:枚举所有进程
示例:
# 枚举所有记事本进程
pid_list = ola.EnumProcess("notepad.exe")
if pid_list:
pid_array = pid_list.split(",")
for pid in pid_array:
messagebox("找到记事本进程,ID:" + pid)
# 枚举所有Chrome浏览器进程
pid_list = ola.EnumProcess("chrome.exe")
if pid_list:
pid_array = pid_list.split(",")
for pid in pid_array:
messagebox("找到Chrome进程,ID:" + pid)
# 枚举所有进程
pid_list = ola.EnumProcess("")
if pid_list:
pid_array = pid_list.split(",")
messagebox("系统中共有 " + str(len(pid_array)) + " 个进程")
返回值
字符串:
- 返回所有匹配的进程PID,按进程启动顺序排序
- 返回格式为"pid1,pid2,pid3"
- 如果没有找到匹配的进程,返回空字符串
注意事项
- DLL调用返回字符串指针地址,需要调用 FreeStringPtr 接口释放内存
- 进程ID列表中的进程按启动时间排序,越早启动的进程排在越前面
- 某些系统进程可能无法被枚举,这取决于当前用户的权限
- 建议在使用此函数前,先使用 GetProcessInfo 函数获取进程的详细信息
- 如果需要查找特定窗口的进程,可以使用 GetWindowProcessId 函数