易语言纯API枚举系统进程,调用了GetCurrentProcessId,CreateToolhelp32Snapshot,Module32First,Module32Next。
取当前进程标识符
.版本 2 .DLL命令 取当前进程标识符_, 整数型, "kernel32.dll", "GetCurrentProcessId", , 获取当前进程一个唯一的标识符
取创建32位帮助工具快照
.版本 2 .DLL命令 取创建32位帮助工具快照_, 整数型, "kernel32.dll", "CreateToolhelp32Snapshot", , 取进程信息 .参数 标志, 整数型, , lFlags .参数 进程标识符, 整数型, , lProcessID
寻找第一个32位模块
.版本 2 .DLL命令 寻找第一个32位模块_, 整数型, "kernel32.dll", "Module32First" .参数 快照句柄, 整数型, , hSnapshot .参数 模块进程结构, 模块地址_, 传址, uProcess
寻找下一个32位模块
.版本 2 .DLL命令 寻找下一个32位模块_, 整数型, "kernel32.dll", "Module32Next" .参数 快照句柄, 整数型, , hSnapshot .参数 模块进程结构, 模块地址_, 传址, uProcess
数据类型 MODULEENTRY32
.版本 2 .数据类型 模块地址_, , MODULEENTRY32 .成员 结构大小, 整数型, , , dwSize .成员 模块标识符, 整数型, , , th32ModuleID .成员 进程标识符, 整数型, , , th32ProcessID .成员 模块数, 整数型, , , GlblcntUsage .成员 进程数, 整数型, , , ProccntUsage .成员 模块基址, 整数型, , , modBaseAddr .成员 模块基址大小, 整数型, , , modBaseSize .成员 模块句柄, 整数型, , , hModule .成员 模块名称, 字节型, , "256", szModule .成员 文件路径, 字节型, , "260", szExePath
枚举进程模块
.版本 2
.支持库 iext
.子程序 枚举进程模块
.局部变量 局部_模块地址, 模块地址_
.局部变量 局部_进程标识符, 整数型
.局部变量 局部_快照句柄, 整数型
.局部变量 局部_数目, 整数型
.局部变量 局部_文件名, 字节集
.局部变量 局部_路径, 字节集
.局部变量 局部_计次, 整数型
.局部变量 局部_表项索引, 整数型
局部_进程标识符 = 取当前进程标识符_ ()
局部_快照句柄 = 取创建32位帮助工具快照_ (8, 局部_进程标识符)
局部_模块地址.结构大小 = 548
局部_数目 = 寻找第一个32位模块_ (局部_快照句柄, 局部_模块地址)
超级列表框_效果.全部删除 ()
.判断循环首 (局部_数目 ≠ 0)
局部_文件名 = 取空白字节集 (256)
局部_路径 = 取空白字节集 (260)
.计次循环首 (256, 局部_计次)
局部_文件名 [局部_计次] = 局部_模块地址.模块名称 [局部_计次]
.计次循环尾 ()
.计次循环首 (260, 局部_计次)
局部_路径 [局部_计次] = 局部_模块地址.文件路径 [局部_计次]
.计次循环尾 ()
局部_表项索引 = 超级列表框_效果.插入表项 (, 取字节集数据 (局部_路径, #文本型, ), , , , )
超级列表框_效果.置标题 (局部_表项索引, 1, 取字节集数据 (局部_文件名, #文本型, ))
局部_数目 = 寻找下一个32位模块_ (局部_快照句柄, 局部_模块地址)
.判断循环尾 ()