WindowsでC++を使用してPIDからプロセス名を取得するにはどうすればよいですか?C++でプロセス名を取得する方法
18
A
答えて
2
特定のプロセスの実行可能イメージ名を取得しようとしている場合は、GetModuleFileNameを参照してください。
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;
}
12
プロセスハンドルの後にWIN32 API GetModuleBaseNameを使用してプロセス名を取得できます。 OpenProcessを使用してプロセスハンドルを取得できます。
実行可能ファイル名を取得するには、GetProcessImageFileNameも使用できます。
2
ツールのヘルプライブラリでenumprocess機能をチェックアウト:
http://msdn.microsoft.com/en-us/library/ms682629(v=vs.85).aspx
良い例をhttp://msdn.microsoft.com/en-us/library/ms682623(v=vs.85).aspx
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();
}
関連する問題
- 1. プロセス名を取得するC++
- 2. クラス名でPIDを取得し、取得したプロセスをkillする方法
- 3. プロセス名でプロセスidを取得する方法はありますか?
- 4. C++でプロセス情報を取得する方法
- 5. WindowsのCでプロセスのユーザー名を取得する
- 6. Win32API - プロセスハンドルからプロセスのファイル名を取得する方法?
- 7. 実際のプロセス名を取得する方法は?
- 8. LinuxのC/C++でユーザー名を取得する方法は?
- 9. プロセスCからappnameを取得する方法#
- 10. Mac OSでプロセスのユーザー名をPIDで取得する方法は?
- 11. cのinode値でディレクトリ名を取得する方法は?
- 12. VS C#でローカライズされたキーボードキー名を取得する方法
- 13. wpfのベースディレクトリ(アプリケーションディレクトリ)内でイメージ名を取得する方法C#
- 14. mongooseサーバーでドメイン名を取得する方法C++
- 15. アセンブリ内で呼び出しプロセス名を取得する方法は?
- 16. 親プロセスから子プロセスを取得する方法
- 17. NodejsプロセスIDから子プロセスを取得する方法
- 18. プロセスのアイコンを取得するmfc C++
- 19. C++ CreateProcessを使用してプロセスでハンドルを取得する方法は?
- 20. C#で現在アクティブなプロセスの継続時間を取得する方法は?
- 21. C++でプロセスのベースアドレスを取得する方法内部的には?
- 22. C++プログラムでOS Xのプロセス開始時間を取得する方法
- 23. C#で特定の子プロセスからのみキーボードストロークを取得する方法
- 24. C++プロセス名を使用してウィンドウタイトルを取得
- 25. カーネル。 CPUタイムスライスを持つプロセス名とPIDを取得する方法
- 26. C#でスループットを取得する方法
- 27. Cでコンピュータステータスを取得する方法#
- 28. C++でHWIDを取得する方法
- 29. フィボナッチをCで取得する方法#
- 30. Win XPでプロセスIDでセッションIDを取得する方法
GetModuleFileNameはは考慮してPIDを取ることはありません。指定されたモジュールを含むファイルの完全修飾パスを指定するだけです。 –