zoukankan      html  css  js  c++  java
  • c++ win32 遍历进程列表

    使用 CreateToolhelp32Snapshot

    #include <iostream>
    #include <Windows.h>
    #include <TlHelp32.h>
    #include <Psapi.h>
    
    int main() {
      HANDLE hSnap = CreateToolhelp32Snapshot(PROCESS_ALL_ACCESS, 0);
      if (hSnap != INVALID_HANDLE_VALUE)
      {
        PROCESSENTRY32 pe;
        pe.dwSize = sizeof(pe);
        if (Process32First(hSnap, &pe))
        {
          do {
            printf("PID: %X	%ls
    ", pe.th32ProcessID, pe.szExeFile);
          } while (Process32Next(hSnap, &pe));
        }
      }
      CloseHandle(hSnap);
      return 0;
    }
    

    使用 EnumProcesses

    #include <iostream>
    #include <Windows.h>
    #include <TlHelp32.h>
    #include <Psapi.h>
    
    int main() {
      DWORD aProcesses[1024], cbNeeded, cProcesses;
      size_t i;
      if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
      {
        return 1;
      }
      cProcesses = cbNeeded / sizeof(DWORD);
      for (i = 0; i < cProcesses; i++)
      {
        if (aProcesses[i] != 0)
        {
          DWORD pid = aProcesses[i];
          TCHAR szProcessName[MAX_PATH] = TEXT("???");
          HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid);
          if (NULL != hProcess)
          {
            HMODULE hMod;
            DWORD cbNeeded;
            if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
            {
              GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR));
            }
          }
          printf("PID: %X	%ls
    ", pid, szProcessName);
          CloseHandle(hProcess);
        }
      }
      return 0;
    }
    
  • 相关阅读:
    c#文件操作
    c#关于udp远程关闭一个连接问题
    c#面向对象之多态
    在Eclipse上安装Activiti插件
    引入Activiti配置文件activiti.cfg.xml
    mysql笔记(暂时)
    MySQL创建用户与授权方法
    javaweb学习总结(五)——Servlet开发(一)
    Linux常用命令1
    Eureka注册中心高可用集群配置
  • 原文地址:https://www.cnblogs.com/ajanuw/p/14439105.html
Copyright © 2011-2022 走看看