Windows API編程----枚舉系統進程

來源:互聯網
上載者:User

標籤:

1.該函數可以檢索系統中的每個進程的標識符(進程ID)

BOOL WINAPI EnumProcesses(
 _Out_ DWORD *pProcessIds, _In_  DWORD cb, _Out_ DWORD *pBytesReturned);
cb為pProcessIds指向的記憶體空間的位元組數,(*pBytesReturned)/sizeof(DWORD)即為pProcessIds中返回的進程ID的個數。


2.檢索制定進程中的每個模組的控制代碼

BOOL WINAPI EnumProcessModules(
_In_ HANDLE hProcess,
_Out_ HMODULE *lphModule,
_In_ DWORD cb,
_Out_ LPDWORD lpcbNeeded
);

hProcess:  進程控制代碼

lphModule: 接收module控制代碼的數組

cb: lphModule數組的位元組數

lpcbNeeded: 在lphModule 數組中儲存所有module控制代碼所需的位元組數(可以先將lphModule設定為NULL,cb設定為0,來調用該函數,然後用lpcbNeeded中儲存的位元組數來分配lphModule的空間,然後再重新調用EnumProcessModules)

3.檢索制定的Module的 base name

DWORD WINAPI GetModuleBaseName(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpBaseName,
_In_ DWORD nSize
);

hProcess: 包含 Module 的進程的控制代碼

hModule: 要檢索的Module的控制代碼;如果該參數為NULL,該函數返回調用該函數的進程的名字

lpBaseName: 用來接收Module名字的buffer;buffer空間不夠的話,base name就被截斷

nSize:lpBaseName buffer的空間大小

傳回值:調用成功,則返回copy到lpBaseName中的字串的長度;調用失敗,則返回0

 

樣本程式:

#include<iostream>#include<Windows.h>#include<Psapi.h>using namespace std;void PrintProcessNameAndID(DWORD processID);int main(int argc, char* argv[]){    //獲得進程標識符列表    DWORD aProcesses[1024], cbNeeded, cProcesses;    unsigned int i;    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))        return 1;    //計算返回進程標識符的個數    cProcesses = cbNeeded / sizeof(DWORD);    for (i = 0; i < cProcesses; i++)    {        PrintProcessNameAndID(aProcesses[i]);    }    system("pause");    return 0;}void PrintProcessNameAndID(DWORD processID){    char szProcessName[MAX_PATH] = "unknown";    //得到進程控制代碼    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);    if (NULL != hProcess)    {        HMODULE hMod;        DWORD cbNeeded;        if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))        {            GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName));        }        else return;    }    else         return;    printf("%s (Process ID:%u)\n", szProcessName, processID);    CloseHandle(hProcess);}

 

Windows API編程----枚舉系統進程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.