要在uses里加入PsAPI,PsAPI可以取得模块的带路径名,但对于system用户的进程有无法访问的错误返回。
先看代码:
上面的代码主要用到三个API函数,MSDN上的C++语法描述:
一、枚举系统中的进程,EnumProcesses,如果此函数返回0表示出错。
二、打开一个进程,OpenProcess,如果此数返回0表时打开进程出错,在Delphi中用SysErrorMessage(GetLastError)可以得到出错原因。
三、取进程的全路径名, GetModuleFileNameEx,如果此函数成功,返回往lpFileName中写了多少个字节,如果此函数返回0,表示出错。要注意的是,如果lpFilename不够大,名字会被载掉,所以,在调用此函数后,可比较一下此函数的返回值与nSize的大小,如果nSize大,说明lpFilename不够大,把lpFilename再设大一点,再次调用此函数就可以了。
四、枚举进程中的模块,EnumProcessModules,如果此函数失败,返回0。
第二种是在uses里加入TlHelp32,这里面的可以取得system用户的进程名,但只是名字,不带路径。
看看代码: