#include<stdio.h>
#include<Windows.h>
#include<Psapi.h>
#pragma comment(lib,"Psapi.lib")
int main()
{
TCHAR path[MAX_PATH+]={};
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, );
if(hProcess == NULL)
return ;
/*
第一種方法是GetProcessImageFileName函數,
這個函數在Windows XP及其以後的系統中都能使用,
使用此函數傳回的路徑不是通常的系統盤符,如"C:\...",
而是驅動層的表示方式"\Device\HarddiskVolume1\...",
是以使用起來不是很友善。
int ret = GetProcessImageFileNameA(hProcess,path,MAX_PATH+);
if(ret == )
{
printf("%d\n",GetLastError());
}
else
printf("%s",path);
*/
/* error
if(!GetModuleFileNameEx(hProcess,NULL,path,MAX_PATH+))
{
printf("%d\n",GetLastError());
return false;
}wsprintf(L"%s\n",path);*/
/*
win7 vista 以上系統可用
DWORD size;
if(!QueryFullProcessImageName(hProcess,NULL,path,&size))
{
printf("%d\n",GetLastError());
}
else
wprintf(L"%s\n",path);
*/return ;
}