根据官方的说法:

For the best results use the following table to convert paths.

Windows 2000 = GetModuleFileNameEx()
Windows XP x32 = GetProcessImageFileName()
Windows XP x64 = GetProcessImageFileName()
Windows Vista = QueryFullProcessImageName()
Windows 7 = QueryFullProcessImageName()


Note: If you are not aware the API GetProcessImageFileName() returns a kernel DOS device path. You can use the following API to map the device paths to a Win32 format.

但要注意的是GetModuleFileName在64bit下获取到的是不正确的,用32去填充64结果是空。本人在32bit的win7下可以准确获取,64bit的win7下得不到自己要的东西。如下图所示:

推荐用vista新增的:QueryFullProcessImageName(),结果入下图:

另外搜遍了网络也没搜到该函数的样例,再懒也只好自己写了~~

DWORD size = MAX_PATH;

char sExeName[MAX_PATH] = {0};

QueryFullProcessImageName(hProcess, 0, sExeName, &size);

当然用GetProcessImageFileName获取更好,只是代码有点长,懒的写了。

本文地址<http://www.cnblogs.com/yuwei/archive/2011/04/26/2029434.html>,转载请注明出处。

posted on 2011-04-26 16:13  俞炜  阅读(4432)  评论(0编辑  收藏  举报