通过传递进程ID取指定进程的程序路径,成功返回程序路径,失败返回空,用到以下API:
1、CreateToolhelp32Snapshot
快照句柄 = CreateToolhelp32Snapshot (8, 进程ID)
2、CloseHandle (快照句柄)
3、目录_取system32目录
GetSystemDirectoryA(成功返回system32目录的全路径)
4、Module32First(此函数检索与进程相关联的第一个模块的信息)
5、GetSystemDirectoryA
6、自定义数据类型,进程模块信息
Win7的80端口默认是被System进程占用的
511遇见易语言模块API教程
1、CreateToolhelp32Snapshot
CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。
.版本 2
.DLL命令 CreateToolhelp32Snapshot, 整数型, "KERNEL32.DLL", "CreateToolhelp32Snapshot", , 进程_取ID数组 创建一个进程的快照调用成功,返回快照的句柄
.参数 dwFlags, 整数型, , //用来指定"快照"中需要返回的对象
.参数 th32ProcessID, 整数型, , //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0
2、CloseHandle (快照句柄)
CloseHandle包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。
.版本 2
.DLL命令 CloseHandle, 整数型, "kernel32", "CloseHandle", , 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError
.参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄;
3、目录_取system32目录
.版本 2
.子程序 目录_取system32目录, 文本型, 公开, 返回:比如c:\WINDOWS\system32\
.局部变量 j_text, 文本型
j_text = 取空白文本 (255)
GetSystemDirectoryA (j_text, 255)
.如果真 (取文本右边 (j_text, 1) ≠ “\”)
j_text = j_text + “\”
.如果真结束
返回 (j_text)
4、Module32First
.版本 2
.DLL命令 Module32First, 整数型, "KERNEL32.DLL", "Module32First", , 进程_取程序路径
.参数 hSnapshot, 整数型, , 快照句柄
.参数 lpme, 进程模块信息
5、GetSystemDirectoryA
.版本 2
.DLL命令 GetSystemDirectoryA, 整数型, "kernel32", "GetSystemDirectoryA", , 目录_取system32目录 这个函数能取得Windows系统目录(System目录)的完整路径名。
.参数 缓冲区, 文本型, , 用于装载系统目录路径名的一个字串缓冲区。它应事先初始化成nSize+1个字符的长度。通常至少要为这个缓冲区分配MAX_PATH个字符的长度
.参数 缓冲区长度, 整数型, , lpBuffer字串的最大长度;255
6、自定义数据类型进程模块信息
.版本 2
.数据类型 进程模块信息, 公开, 进程模块信息modBaseAddr和hModule的成员只有在指定的th32ProcessID进程中才有效。
.成员 dwSize, 整数型, , , 1指定结构的长度,以字节为单位。在调用Module32First功能,设置这个成员SIZEOF(MODULEENTRY32)。如果你不初始化的dwSize,Module32First将失败。
.成员 th32ModuleID, 整数型, , , 2此成员已经不再被使用,通常被设置为1
.成员 th32ProcessID, 整数型, , , 3正在检查的进程标识符。这个成员的内容,可以使用Win32 API的元素
.成员 GlblcntUsage, 整数型, , , 4全局模块的使用计数,即模块的总载入次数。通常这一项是没有意义的,被设置为0xFFFF。
.成员 ProccntUsage, 整数型, , , 5全局模块的使用计数(与GlblcntUsage相同)。通常这一项也是没有意义的,被设置为0xFFFF。
.成员 modBaseAddr, 整数型, , , 6模块的基址,在其所属的进程范围内。
.成员 modBaseSize, 整数型, , , 7模块的大小,单位字节。
.成员 hModule, 整数型, , , 8所属进程的范围内,模块句柄。
.成员 szModule, 字节型, , "256", NULL结尾的字符串,其中包含模块名。
.成员 szExePath, 字节型, , "256", NULL结尾的字符串,其中包含的位置,或模块的路径。
7、进程取程序路径易语言源码:
.版本 2
.子程序 进程_取程序路径, 文本型, 公开, 取指定进程的程序路径,成功返回程序路径,失败返回空
.参数 进程ID, 整数型
.局部变量 快照句柄, 整数型
.局部变量 模块信息, 进程模块信息
.局部变量 路径, 文本型
快照句柄 = CreateToolhelp32Snapshot (8, 进程ID)
.判断开始 (进程ID = 4)
CloseHandle (快照句柄)
返回 (目录_取system32目录 ())
.判断 (进程ID = -1)
返回 (“”)
.默认
.判断结束
模块信息.dwSize = 1024
Module32First (快照句柄, 模块信息)
路径 = 到文本 (模块信息.szExePath)
.判断开始 (取文本左边 (路径, 11) = “\SystemRoot”)
路径 = 读环境变量 (“SystemRoot”) + 子文本替换 (路径, “\SystemRoot”, “”, , 1, 假)
.判断 (取文本左边 (路径, 4) = “\??\”)
路径 = 子文本替换 (路径, “\??\”, “”, , 1, 假)
.默认
.判断结束
CloseHandle (快照句柄)
返回 (路径)
参考:
https://baike.baidu.com/item/MODULEENTRY32/926525?fr=aladdin
https://technet.microsoft.com/zh-cn/library/ms886756