Con la API GetModuleFileName o GetModuleFileNameEx obtienes lo que buscas. En tu caso precisas abrir el proceso conociendo su PID. para poder hacer eso necesitar ejecutar el programa como administrador. Para evitar eso, yo uso esta forma:
Código PHP:
bool GetProcessImageFileName(DWORD dwProcessId, char* ExePath, int Size)
{
if(dwProcessId==0 && Size){
*ExePath = 0;
return true;
}
HANDLE hSnapshot;
MODULEENTRY32 ModuleEntry;
ModuleEntry.dwSize = sizeof(MODULEENTRY32);
bool Result = false;
if(Size) *ExePath = 0;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
if(hSnapshot != (HANDLE)-1){
if(Module32First(hSnapshot, &ModuleEntry)){
Result = true;
lstrcpyn(ExePath, ModuleEntry.szExePath, Size);
}
CloseHandle(hSnapshot);
}
return Result;
}
Si te fijas no usa String. El buffer debe ser un char* y debes pasar el tamaño del mismo. Puedes modificarlo para usar Strings.
Saludos.