2010-12-31 27 views

答えて

2

特定のプロセスの実行可能イメージ名を取得しようとしている場合は、GetModuleFileNameを参照してください。

+0

GetModuleFileNameはは考慮してPIDを取ることはありません。指定されたモジュールを含むファイルの完全修飾パスを指定するだけです。 –

23

プロセスに必要な権限があると仮定すると、OpenProcess関数が役立つと思います。プロセスのハンドルを取得したら、GetModuleFileNameEx関数を使用して、プロセスのフルパス(.exeファイルへのパス)を取得できます。

#include "stdafx.h" 
#include "windows.h" 
#include "tchar.h" 
#include "stdio.h" 
#include "psapi.h" 
// Important: Must include psapi.lib in additional dependencies section 
// In VS2005... Project > Project Properties > Configuration Properties > Linker > Input > Additional Dependencies 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    HANDLE Handle = OpenProcess(
     PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 
     FALSE, 
     8036 /* This is the PID, you can find one from windows task manager */ 
    ); 
    if (Handle) 
    { 
     TCHAR Buffer[MAX_PATH]; 
     if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH)) 
     { 
      // At this point, buffer contains the full path to the executable 
     } 
     else 
     { 
      // You better call GetLastError() here 
     } 
     CloseHandle(Handle); 
    } 
    return 0; 
} 
+0

最初にPIDを取得する方法を知ることは興味深いでしょうが、これはOPによって尋ねられません。 – Jaywalker

+0

@Jaywalker wmi呼び出しとwin32_processクラスは、トリックを行います – ROAR

+0

@Jaywalker:EnumProcesses(http://msdn.microsoft.com/en-us/library/ms682629.aspx)を使用できます –

12

プロセスハンドルの後にWIN32 API GetModuleBaseNameを使用してプロセス名を取得できます。 OpenProcessを使用してプロセスハンドルを取得できます。

実行可能ファイル名を取得するには、GetProcessImageFileNameも使用できます。

1

@は、この機能を試してみてください:

std::wstring GetProcName(DWORD aPid) 
{ 
PROCESSENTRY32 processInfo; 
    processInfo.dwSize = sizeof(processInfo); 
    HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); 
    if (processesSnapshot == INVALID_HANDLE_VALUE) 
    { 
     std::wcout << "can't get a process snapshot "; 
     return 0; 
    } 

    for(BOOL bok =Process32First(processesSnapshot, &processInfo);bok; bok = Process32Next(processesSnapshot, &processInfo)) 
    { 
     if(aPid == processInfo.th32ProcessID) 
     { 
      std::wcout << "found running process: " << processInfo.szExeFile; 
      CloseHandle(processesSnapshot); 
      return processInfo.szExeFile; 
     } 

    } 
    std::wcout << "no process with given pid" << aPid; 
    CloseHandle(processesSnapshot); 
    return std::wstring(); 
} 
関連する問題