獲取windows進程信息及CListCtrl控件(List Control)練習

環境:VS2010/MFC/對話框html

效果圖:windows

目錄:api

1.  關於windows進程信息獲取函數

2.  CListCtrl的使用spa

---------------------------------------------------------線程

1. windows進程信息獲取code

  須要包含頭文件orm

  #include <psapi.h>
  #include <TlHelp32.h>htm

     #pragma  comment(lib,"Psapi.lib")blog

  主要函數使用

  CreateToolhelp32Snapshot, Process32First,OpenProcess, GetProcessMemoryInfo,Process32Next。

  PROCESSENTRY32結構中保存進程信息,

  szExeFile--進程名稱

  th32ProcessId--進程Id

  cntThreads--進程包含線程數

  th32ParentProcessId--父進程ID

  pcPriClassBase--線程基礎優先級

     

  內存信息保存在PROCESSMEMORYCOUNTERS中,windows內存項分不少種,下圖是從win7任務管理器的查看--選擇列中所截的圖,

  

  其中,任務管理器上默認顯示的是專用工做集內存,指得是該程序獨有的,不和其餘程序共享的。

  這一項不知道怎麼獲取,PROCESSMEMORYCOUNTERS中沒有。程序中暫時用的workingsetsize,包含了可能被其餘程序共享的內存。

 按鈕響應代碼:

 1 void CSystemProcessDlg::OnBnClickedButton1()
 2 {
 3     // TODO: 在此添加控件通知處理程序代碼
 4     m_listctrl.DeleteAllItems();
 5     HANDLE hSnapshot;
 6     //建立進程信息快照
 7     hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 8     //進程信息結構體
 9     PROCESSENTRY32 pe;
10     //取得第一個
11     Process32First(hSnapshot, &pe);
12     CString str;
13     int i = 0;
14     do 
15     {
16         m_listctrl.InsertItem(i, pe.szExeFile);
17         str.Format("%d", pe.th32ProcessID);
18         m_listctrl.SetItemText(i,1,str);
19 
20         str.Format("%d", pe.cntThreads);
21         m_listctrl.SetItemText(i,2,str);
22 
23         str.Format("%d", pe.th32ParentProcessID);
24         m_listctrl.SetItemText(i,3,str);
25 
26         str.Format("%d", pe.pcPriClassBase);
27         m_listctrl.SetItemText(i,4,str);
28 
29         //根據進程ID獲取內存使用信息
30         HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pe.th32ProcessID); 
31         if(hProcess)
32         {
33             //內存信息結構
34             PROCESS_MEMORY_COUNTERS pmc;
35             if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)))
36             {
37                 str.Format("%dK", pmc.WorkingSetSize/1024);
38                 m_listctrl.SetItemText(i,5,str);
39             }
40         }
41         i++;
42     }
43     while(Process32Next(hSnapshot, &pe));
44     CloseHandle(hSnapshot);
45 }

 

2. CListCtrl控件

  控件用法參考:http://www.cnblogs.com/lidabo/archive/2012/08/23/2652786.html

  直接拖一個List control到界面, 而後須要在屬性中設置:

  View選項爲Report模式。

  添加一個控件變量CListCtrl m_listctrl;

  初始化時在OnInitDialog()中添加:

char *tab[6] = {"進程名稱", "PID", "線程數", "父進程ID", "線程優先級", "內存使用"};

    for (int i = 0; i < 6; i++)
    {
        //LVCFMT_RIGHT表示文字右對齊,60爲列寬
        m_listctrl.InsertColumn(i, tab[i], LVCFMT_RIGHT, 70);
    }
    //設置 進程名稱 列寬
    m_listctrl.SetColumnWidth(0, 130);
    m_listctrl.SetColumnWidth(1, 50);
    m_listctrl.SetColumnWidth(4, 80);
    m_listctrl.SetColumnWidth(5, 80);

    //設置擴展樣式爲全行選取,網格,複選框
    m_listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);

  默認是單列選取,並且除了第一列能夠選,其餘都不能夠選, 默認沒有網格,沒有複選框,經過設置擴展樣式修改。

相關文章
相關標籤/搜索