开源2种方法枚举进程
功能说明:该程序是一款基于易语言(EPL)开发的 Windows 系统进程管理演示软件。其主要功能是遍历当前操作系统中正在运行的所有进程,并将进程的名称及进程标识符(PID)以列表形式展示在用户界面上。程序通过图形化窗口呈现,核心逻辑由两个独立的按钮事件触发,分别采用了两种不同的 Windows API 技术手段来实现相同的进程枚举目标,适合作为学习 Windows API 调用及进程管理的教学案例或测试工具。
程序的具体功能模块与实现细节总结如下:
1. 界面交互设计:
程序属于窗口程序集,界面中包含一个用于数据显示的“超级列表框 1”以及至少两个操作按钮。列表框主要用于展示查询结果,通常分为两列:一列为进程可执行文件名,另一列为对应的进程 ID。两个按钮分别对应“法 1"和“法 2"两种查询算法,点击任意按钮均会先清空列表框原有数据,然后执行相应的查询逻辑并刷新列表。
2. 核心功能一(按钮_法 1):
此方法基于 Windows ToolHelp 32 位帮助库实现。
- 流程:首先调用 CreateToolhelp32Snapshot 函数创建一个当前系统进程空间的静态快照(指定标志 TH32CS_SNAPPROCESS)。随后利用 Process32First 函数读取第一个进程的信息,并进入循环判断。
- 循环处理:在循环内部,使用 Process32Next 函数依次获取后续进程的信息,直到没有更多进程为止。每次获取到有效信息后,将进程的 PID 转换为文本存入列表框隐藏域或特定列,同时将 szExefile(进程文件名)作为显示标题插入到超级列表框中。
- 资源释放:循环结束后,调用 CloseHandle 函数关闭之前创建的快照句柄,防止资源泄漏。
- 特点:这种方法直接遍历系统快照,效率较高,是较经典的进程枚举方式。
3. 核心功能二(按钮_法 2):
此方法结合了 Psapi 库和 Kernel32 库的函数。
- 流程:首先定义一个大小为 255 的整数数组用于存放进程 ID,调用 EnumProcesses 函数一次性获取系统中所有进程的 PID 列表。
- 循环处理:程序遍历获取到的 PID 数组,对每一个 PID 尝试使用 OpenProcess 函数打开进程句柄(请求 PROCESS_ALL_ACCESS 权限)。如果句柄打开成功(不为 0),则调用 GetModuleBaseName 函数获取该进程主模块的名称(即进程名)。
- 异常处理:代码中包含判断,如果 OpenProcess 返回 0(例如无法打开某些受保护的系统进程),则跳过该进程继续下一个,避免程序崩溃。
- 资源释放:每处理完一个进程,都会立即 CloseHandle 关闭该进程句柄。
- 特点:这种方法先获取 ID 再逐个获取名称,相比方法一在某些场景下可能更灵活,但需要处理更多的句柄打开权限问题。
4. 外部依赖与底层命令:
程序深度依赖 Windows 系统动态链接库,代码中明确声明了多个 DLL 命令以支持上述功能:
- KERNEL32.DLL:提供了 CreateToolhelp32Snapshot、Process32First、Process32Next、CloseHandle、OpenProcess 等基础内核级操作函数。
- PSAPI.DLL:提供了 EnumProcesses 和 GetModuleBaseNameA 函数,专门用于进程和模块信息的枚举与获取。
- 数据结构:程序中定义或引用了 PROCESSENTRY32 结构体,这是存储单个进程详细信息的关键数据类型。
5. 程序用途总结:
从代码结构来看,该程序并非为了复杂的商业应用开发,而更侧重于展示如何在易语言环境中通过 Direct API Call(直接 API 调用)来获取系统底层信息。它对比了两种常见的进程枚举技术路线,展示了从快照遍历到 PID 数组获取的不同处理方式,同时也体现了资源句柄申请与释放的基本规范。对于需要编写系统监控、进程杀除或游戏辅助类工具的开发者来说,此代码提供了最基础的框架参考。
======窗口程序集1
| |
| |------ _按钮_法1_被单击
| |
| |------ _按钮_法2_被单击
| |
| |
======调用的Dll
| |
| |---[dll]------ CreateToolhelp32Snapshot
| |
| |---[dll]------ Process32First
| |
| |---[dll]------ Process32Next
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ EnumProcesses
| |
| |---[dll]------ OpenProcess
| |
| |---[dll]------ GetModuleBaseName
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。