【问题标题】:How to get integer PID of process?如何获得进程的整数PID?
【发布时间】:2020-01-07 07:46:42
【问题描述】:

我很好奇 - 如何在 Windows 上的 C++ 中按名称或 PID 列表获取可执行文件的 PID?我参考了这个文档:

Taking a Snapshot and Viewing Processes

编译和运行这段代码时,进程 ID 都是十六进制格式。有没有办法获取 PID 的整数值?

比如有没有办法获取值:

10200

代替

0x000027D8

我必须实际转换十六进制值,还是有办法提取等效整数?

【问题讨论】:

  • 请注意,executable 本身没有 PID。 PID 与进程相关,即可执行文件的运行实例(程序)。

标签: c++ windows process


【解决方案1】:

GetProcessId 函数

检索指定进程的进程标识符。

阅读更多Here

代码示例(注意DWORD definition A DWORD 是一个 32 位无符号 整数):

DWORD MyGetProcessId(LPCTSTR ProcessName) // non-conflicting function name
{
    PROCESSENTRY32 pt;
    HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    pt.dwSize = sizeof(PROCESSENTRY32);
    if (Process32First(hsnap, &pt)) { // must call this first
        do {
            if (!lstrcmpi(pt.szExeFile, ProcessName)) {
                CloseHandle(hsnap);
                return pt.th32ProcessID;
            }
        } while (Process32Next(hsnap, &pt));
    }
    CloseHandle(hsnap); // close handle on failure
    return 0;
}

int main()
{
    DWORD pid = MyGetProcessId(TEXT("calc.exe"));
    std::cout << pid;
    if (pid == 0) { printf("error 1"); getchar(); }//error
    return 0;
}

【讨论】:

  • 如果你能提供一个实际检索整数等值的例子,我会接受这个答案。
  • @MarcusWIlliam OK
【解决方案2】:

PID 本身已经是整数。 MSDN 代码输出十六进制格式的 PID。只需将以下 2 行中的 0x%08X 更改为 %u 即可以十进制格式输出 PID:

_tprintf( TEXT("\n Process ID = %u"), pe32.th32ProcessID );
...
_tprintf( TEXT("\n Parent process ID = %u"), pe32.th32ParentProcessID );

【讨论】:

  • 您能否提供一个按名称获取 PID 的示例?
猜你喜欢
  • 2016-02-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2010-09-16
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多