NT下如何得到进程ID所对应的EXE文件全路径?

olo 2000-04-28 09:54:00
EnumProcess得到的只是文件名,没有路径,怎么回事?
...全文
329 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rosement 2000-04-28
  • 打赏
  • 举报
回复
#include <windows.h>
#include <stdio.h>
#include "psapi.h"

void PrintProcessNameAndID( DWORD processID )
{
char szProcessName[MAX_PATH] = "unknown";

// Get a handle to the process.

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION and
PROCESS_VM_READ,
FALSE, processID );

// Get the process name.

if ( hProcess )
{
HMODULE hMod;
DWORD cbNeeded;

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleFileNameEx(hProcess, hMod, szProcessName,
sizeof(szProcessName) );
}
}

// Print the process name and identifier.

printf( "%s (Process ID: %u)\n", szProcessName, processID );

CloseHandle( hProcess );
}

void main( )
{
// Get the list of process identifiers.

DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;

if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;

// Calculate how many process identifiers were returned.

cProcesses = cbNeeded / sizeof(DWORD);

// Print the name and process identifier for each process.

for ( i = 0; i < cProcesses; i++ )
PrintProcessNameAndID( aProcesses[i] );
}
编译以上代码,就可以实现功能,注意PSAPI.H和PSAPI.LIB你可以在VISUAL C++的
SAMPLES中找到,将这两个文件分别加入到C++的INCLUDE目录和LIB目录中,另外在工程编译时,在PROJECT的SETTINGS的LINK中加入PSAPI.LIB的应用,GOOD LUCK!
olo 2000-04-28
  • 打赏
  • 举报
回复
不好使
softdoctor 2000-04-28
  • 打赏
  • 举报
回复
用GetModuleFileName函数
olo 2000-04-28
  • 打赏
  • 举报
回复
货真价实!!!
加分了。
rosement 2000-04-28
  • 打赏
  • 举报
回复
货真价实!!!
olo 2000-04-28
  • 打赏
  • 举报
回复
非常感谢,好象跟我的程序差不多。

麻烦您告诉我这个程序运行后是否显示的是全路径,而不是文件名?
能确认吗?

15,471

社区成员

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

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