zoukankan      html  css  js  c++  java
  • 获取windows进程信息及CListCtrl控件(List Control)练习

    环境:VS2010/MFC/对话框

    效果图:

    目录:

    1.  关于windows进程信息获取

    2.  CListCtrl的使用

    ---------------------------------------------------------

    1. windows进程信息获取

      需要包含头文件

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

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

      主要函数使用

      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);

      默认是单列选取,而且除了第一列可以选,其他都不可以选, 默认没有网格,没有复选框,通过设置扩展样式修改。

  • 相关阅读:
    知识点:Mysql 索引优化实战(3)
    知识点:Mysql 索引原理完全手册(2)
    知识点:Mysql 索引原理完全手册(1)
    大数据体系:数据分析体系总图
    数据化分析:微信文章不增粉的主要原因
    提问:MicrosoftUnderlying input stream returned zero bytes
    优化:更优雅的异步代码?
    涨姿势:Mysql 性能优化完全手册
    总结:Java 集合进阶精讲1
    冷知识点:COLLATE 关键字是什么意思?
  • 原文地址:https://www.cnblogs.com/fwst/p/3711905.html
Copyright © 2011-2022 走看看