怎样根据进程名得到其 ID(我想得到Explorer.exe的ID)

解决方案 »

  1.   

    列举当前所有进程,找到进程名符合你要求的进程idvoid CEnumProcessView::GetNTPsInfo()
    {
    ENUMPROCESSES EnumProcesses;
    ENUMPROCESSMODULES EnumProcessModules;
    GETMODULEFILENAME GetModuleFileName;
    GETPROCESSMEMORYINFO GetProcessMemoryInfo;
    PROCESS_MEMORY_COUNTERS  MemoryInfo;
    FILETIME flKernelTime;
    FILETIME flUserTime;
    FILETIME flCreateTime;
    FILETIME flExitTime;
    FILETIME flTotalTime;
    SYSTEMTIME stSystemTime;
    DWORD dwProcID[1024];
    DWORD dwProcNum;
    HMODULE ModuleID[1024];
    DWORD dwModuleNum;
    char cFileName[MAX_PATH];
    DWORD i = 0;
    HANDLE hProcess; hPsapi = LoadLibrary("psapi.dll");
    if(hPsapi == NULL)
    {
    MessageBox("Load psapi.dll error");
    return;
    } EnumProcesses = (ENUMPROCESSES)GetProcAddress((HINSTANCE)hPsapi, "EnumProcesses");
    EnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress((HINSTANCE)hPsapi, "EnumProcessModules");
    GetModuleFileName = (GETMODULEFILENAME)GetProcAddress((HINSTANCE)hPsapi, "GetModuleFileNameExA");
    GetProcessMemoryInfo = (GETPROCESSMEMORYINFO)GetProcAddress((HINSTANCE)hPsapi, "GetProcessMemoryInfo");
    if(EnumProcesses == NULL || GetProcessMemoryInfo == NULL
    || GetModuleFileName == NULL || GetProcessMemoryInfo == NULL)
    {
    MessageBox("GetProcAddress() error");
    return;
    } EnumProcesses(dwProcID, sizeof(dwProcID), &dwProcNum);
    dwProcNum = dwProcNum / sizeof(DWORD);
    for(i = 0; i < dwProcNum; i++)
    {
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcID[i]);
    DWORD dwRet = GetLastError();
    EnumProcessModules(hProcess, ModuleID, sizeof(ModuleID), &dwModuleNum);
    dwModuleNum = dwModuleNum / sizeof(HMODULE);
    if(GetModuleFileName(hProcess, ModuleID[0], cFileName, sizeof(cFileName)))
    {
    GetProcessTimes(hProcess, &flCreateTime, &flExitTime, &flKernelTime, &flUserTime);
    // DwordToFileTime((FileTimeToDword(&flKernelTime) - FileTimeToDword(&flCreateTime)) 
    // + (FileTimeToDword(&flUserTime) - FileTimeToDword(&flCreateTime)), &flTotalTime);
    // FileTimeToSystemTime(&flTotalTime, &stSystemTime);
    GetProcessMemoryInfo(hProcess, &MemoryInfo, sizeof(PROCESS_MEMORY_COUNTERS));
    strcpy(m_ProcessInfoList[m_ProcessCount].cFileName, cFileName);
    m_ProcessInfoList[m_ProcessCount].dwProcessID = dwProcID[i];
    m_ProcessInfoList[m_ProcessCount].iMemSize = MemoryInfo.WorkingSetSize / 1024;
    m_ProcessCount++;
    }

    CloseHandle(hProcess);
    }
    }
      

  2.   

    void CEnumProcessView::GetWin9xPsInfo()
    {
    HANDLE hProcess;
    PROCESSENTRY32 pePsEntry; pePsEntry.dwSize = sizeof(pePsEntry);

    hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(Process32First(hProcess, &pePsEntry))
    {
    while(1)
    {
    if(!Process32Next(hProcess, &pePsEntry))
    {
    break;
    }
    strcpy(m_ProcessInfoList[m_ProcessCount].cFileName, pePsEntry.szExeFile);
    m_ProcessInfoList[m_ProcessCount].dwProcessID = pePsEntry.th32ProcessID;
    m_ProcessInfoList[m_ProcessCount].iMemSize = 0;
    m_ProcessCount++;
    }
    } CloseHandle(hProcess);
    }
      

  3.   

    列举当前所有进程,找到进程名符合你要求的进程idvoid CEnumProcessView::GetNTPsInfo()
    {
    ENUMPROCESSES EnumProcesses;
    ENUMPROCESSMODULES EnumProcessModules;
    GETMODULEFILENAME GetModuleFileName;
    GETPROCESSMEMORYINFO GetProcessMemoryInfo;
    PROCESS_MEMORY_COUNTERS  MemoryInfo;
    FILETIME flKernelTime;
    FILETIME flUserTime;
    FILETIME flCreateTime;
    FILETIME flExitTime;
    FILETIME flTotalTime;
    SYSTEMTIME stSystemTime;
    DWORD dwProcID[1024];
    DWORD dwProcNum;
    HMODULE ModuleID[1024];
    DWORD dwModuleNum;
    char cFileName[MAX_PATH];
    DWORD i = 0;
    HANDLE hProcess; hPsapi = LoadLibrary("psapi.dll");
    if(hPsapi == NULL)
    {
    MessageBox("Load psapi.dll error");
    return;
    } EnumProcesses = (ENUMPROCESSES)GetProcAddress((HINSTANCE)hPsapi, "EnumProcesses");
    EnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress((HINSTANCE)hPsapi, "EnumProcessModules");
    GetModuleFileName = (GETMODULEFILENAME)GetProcAddress((HINSTANCE)hPsapi, "GetModuleFileNameExA");
    GetProcessMemoryInfo = (GETPROCESSMEMORYINFO)GetProcAddress((HINSTANCE)hPsapi, "GetProcessMemoryInfo");
    if(EnumProcesses == NULL || GetProcessMemoryInfo == NULL
    || GetModuleFileName == NULL || GetProcessMemoryInfo == NULL)
    {
    MessageBox("GetProcAddress() error");
    return;
    } EnumProcesses(dwProcID, sizeof(dwProcID), &dwProcNum);
    dwProcNum = dwProcNum / sizeof(DWORD);
    for(i = 0; i < dwProcNum; i++)
    {
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcID[i]);
    DWORD dwRet = GetLastError();
    EnumProcessModules(hProcess, ModuleID, sizeof(ModuleID), &dwModuleNum);
    dwModuleNum = dwModuleNum / sizeof(HMODULE);
    if(GetModuleFileName(hProcess, ModuleID[0], cFileName, sizeof(cFileName)))
    {
    GetProcessTimes(hProcess, &flCreateTime, &flExitTime, &flKernelTime, &flUserTime);
    // DwordToFileTime((FileTimeToDword(&flKernelTime) - FileTimeToDword(&flCreateTime)) 
    // + (FileTimeToDword(&flUserTime) - FileTimeToDword(&flCreateTime)), &flTotalTime);
    // FileTimeToSystemTime(&flTotalTime, &stSystemTime);
    GetProcessMemoryInfo(hProcess, &MemoryInfo, sizeof(PROCESS_MEMORY_COUNTERS));
    strcpy(m_ProcessInfoList[m_ProcessCount].cFileName, cFileName);
    m_ProcessInfoList[m_ProcessCount].dwProcessID = dwProcID[i];
    m_ProcessInfoList[m_ProcessCount].iMemSize = MemoryInfo.WorkingSetSize / 1024;
    m_ProcessCount++;
    }

    CloseHandle(hProcess);
    }
    }