如何获得进程的程序名

lobuddha 2003-10-18 07:57:35
使用CreateToolhelp32Snapshot函数好象不行,

HANDLE snapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 proEntry;
char strBuffer[MAX];

proEntry.dwSize = sizeof(proEntry);
BOOL nextPro=Process32First(snapShot, &proEntry);
while(nextPro)
{
strcpy(strBuffer, proEntry.szExeFile);
}
nextPro=Process32Next(snapShot, &proEntry);
}
CloseHandle(snapShot);
以上方式没法得到进程程序名, 不知是何解?
...全文
40 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangsiwei 2003-11-03
  • 打赏
  • 举报
回复
while(nextPro)
{ if(你的进程特征,比如ID,句柄什么)
strcpy(strBuffer, proEntry.szExeFile);
}
mfc168 2003-11-03
  • 打赏
  • 举报
回复
GetModuleFileName
李马 2003-11-03
  • 打赏
  • 举报
回复
你的方法在95内核的系统上是可行的,但是NT内核的系统抛弃了这种做法,这时候需要使用psapi库中提供的函数。
#include <psapi.h>
#pragma comment(lib, "psapi.lib")
// ...
// NT系统下枚举进程
DWORD dwProcessIDs[1024], cbNeeded, i;
// 获取所有进程ID
EnumProcesses(dwProcessIDs, sizeof(dwProcessIDs), &cbNeeded);
// 获取进程个数
cbNeeded /= sizeof(DWORD);
// 枚举进程
for (i = 0; i < cbNeeded; i++)
{
HMODULE hModule;
DWORD dwNeeded;
HANDLE hProcess;
TCHAR szBaseName[MAX_PATH], szFullName[MAX_PATH];
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessIDs[i]);
if (hProcess != NULL)
{
// 取得第一个模块(进程本身)
EnumProcessModules(hProcess, &hModule, sizeof(HMODULE), &dwNeeded);
// 获得进程模块名(不含路径)
GetModuleBaseName(hProcess, hModule, szBaseName, MAX_PATH);
// 获得进程全路径
GetModuleFileNameEx(hProcess, hModule, szFullName, MAX_PATH);
CloseHandle(hProcess);
// ...
}
}

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧