Windows 获取进程ID

冷不防 2022-05-18 10:47 468阅读 0赞
  1. DWORD GetProcessID(const char *ProcessName)
  2. {
  3. PROCESSENTRY32 pe32;
  4. pe32.dwSize = sizeof(PROCESSENTRY32);
  5. //获取进程快照
  6. HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  7. if (hProcessSnap == INVALID_HANDLE_VALUE)
  8. {
  9. printf("CreateToolhelp32Snapshot 调用失败.\n");
  10. return -1;
  11. }
  12. //遍历进程快照,轮流显示每个进程的信息
  13. BOOL bMore = ::Process32First(hProcessSnap, &pe32);
  14. while (bMore)
  15. {
  16. printf("进程名称:%ls\n", pe32.szExeFile); //这里得到的应该是宽字符,用%ls,不然无法正常打印
  17. printf("进程ID:%u\n\n", pe32.th32ProcessID);
  18. if (lstrcmp(pe32.szExeFile, ProcessName) == 0)
  19. {
  20. break;
  21. }
  22. bMore = ::Process32Next(hProcessSnap, &pe32);
  23. }
  24. //不要忘记清除掉snapshot对象
  25. ::CloseHandle(hProcessSnap);
  26. return pe32.th32ProcessID;
  27. }
  28. int main()
  29. {
  30. DWORD ID;
  31. const char *name = "sscom32.exe";
  32. ID = GetProcessID(name);
  33. printf("GetProcessId %s %u\n", name, ID);
  34. while (1);
  35. return 0;
  36. }

需要配置
1
或者

  1. DWORD GetProcessID(LPCWSTR ProcessName)
  2. {
  3. PROCESSENTRY32 pe32;
  4. pe32.dwSize = sizeof(PROCESSENTRY32);
  5. //获取进程快照
  6. HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  7. if (hProcessSnap == INVALID_HANDLE_VALUE)
  8. {
  9. printf("CreateToolhelp32Snapshot 调用失败.\n");
  10. return -1;
  11. }
  12. //遍历进程快照,轮流显示每个进程的信息
  13. BOOL bMore = ::Process32First(hProcessSnap, &pe32);
  14. while (bMore)
  15. {
  16. //printf("进程名称:%ls\n", pe32.szExeFile); //这里得到的应该是宽字符,用%ls,不然无法正常打印
  17. //printf("进程ID:%u\n\n", pe32.th32ProcessID);
  18. if (lstrcmp(pe32.szExeFile, ProcessName) == 0)
  19. {
  20. break;
  21. }
  22. bMore = ::Process32Next(hProcessSnap, &pe32);
  23. }
  24. //不要忘记清除掉snapshot对象
  25. ::CloseHandle(hProcessSnap);
  26. return pe32.th32ProcessID;
  27. }
  28. int main()
  29. {
  30. DWORD ID;
  31. LPCWSTR name = _T("sscom32.exe");
  32. ID = GetProcessID(name);
  33. printf("GetProcessId %ls %u\n", name, ID);
  34. while (1);
  35. return 0;
  36. }

发表评论

表情:
评论列表 (有 0 条评论,468人围观)

还没有评论,来说两句吧...

相关阅读

    相关 通过进程ID获取基地址

    下面代码是通过进程ID来获取进程的[基地址][Link 1],创建一个进程快照后,读取进程模块,一般情况下第一个模块就是进程的基地址,下面的程序通过模块的字符串匹配来找到基地址