获取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,包含了可能被其他程序共享的内存。
按钮响应代码:
void CSystemProcessDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
m_listctrl.DeleteAllItems();
HANDLE hSnapshot;
//创建进程信息快照
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, );
//进程信息结构体
PROCESSENTRY32 pe;
//取得第一个
Process32First(hSnapshot, &pe);
CString str;
int i = ;
do
{
m_listctrl.InsertItem(i, pe.szExeFile);
str.Format("%d", pe.th32ProcessID);
m_listctrl.SetItemText(i,,str); str.Format("%d", pe.cntThreads);
m_listctrl.SetItemText(i,,str); str.Format("%d", pe.th32ParentProcessID);
m_listctrl.SetItemText(i,,str); str.Format("%d", pe.pcPriClassBase);
m_listctrl.SetItemText(i,,str); //根据进程ID获取内存使用信息
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pe.th32ProcessID);
if(hProcess)
{
//内存信息结构
PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc)))
{
str.Format("%dK", pmc.WorkingSetSize/);
m_listctrl.SetItemText(i,,str);
}
}
i++;
}
while(Process32Next(hSnapshot, &pe));
CloseHandle(hSnapshot);
}
2. CListCtrl控件
控件用法参考:http://www.cnblogs.com/lidabo/archive/2012/08/23/2652786.html
直接拖一个List control到界面, 然后需要在属性中设置:
View选项为Report模式。
添加一个控件变量CListCtrl m_listctrl;
初始化时在OnInitDialog()中添加:
char *tab[] = {"进程名称", "PID", "线程数", "父进程ID", "线程优先级", "内存使用"};
for (int i = ; i < ; i++)
{
//LVCFMT_RIGHT表示文字右对齐,60为列宽
m_listctrl.InsertColumn(i, tab[i], LVCFMT_RIGHT, );
}
//设置 进程名称 列宽
m_listctrl.SetColumnWidth(, );
m_listctrl.SetColumnWidth(, );
m_listctrl.SetColumnWidth(, );
m_listctrl.SetColumnWidth(, );
//设置扩展样式为全行选取,网格,复选框
m_listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES);
默认是单列选取,而且除了第一列可以选,其他都不可以选, 默认没有网格,没有复选框,通过设置扩展样式修改。
获取windows进程信息及CListCtrl控件(List Control)练习的更多相关文章
- 【VS开发】CListCtrl控件使用
为何调用了CListCtrl的InsertColumn却什么效果都没有?这个问题以前发现过,今天才清楚,那就是要把它的Style指定为LVS_REPORT. 具体做法如下: 假 ...
- CListCtrl控件使用方法总结
今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtr ...
- VC的CListCtrl控件
1. CListCtrl 样式及设置 2. 扩展样式设置 3. 数据插入 4. 一直选中Item 5. 选中和取消选中Item 6. 得到CListCtrl中所有行的checkbox的状态 7. 得到 ...
- 【VS开发】CListCtrl控件使用方法总结
CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...
- MFC实现 自适应操作系统的CListCtrl控件
新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...
- 重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree
原文:重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree [源码下载] 重新想象 ...
- 重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager
原文:重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState ...
- 【VS开发】关于在CFormView中实现CListCtrl控件的注意事项
[VS开发]关于在CFormView中实现CListCtrl控件的注意事项 标签(空格分隔): [VS开发] 今天调试中发现了一项非常令人恼怒的事情,本来早都知道在CFormView中没有了像在对话框 ...
- [转载]CTreeCtrl 和 CListCtrl 控件(VC_MFC)
来源:http://www.cnblogs.com/kzloser/archive/2012/11/23/2783305.html Tree Control 控件(MSDN 链接) 说明: 树形控件是 ...
随机推荐
- SQLyog Enterprise Trial 试用期问题
SQLyog Enterprise Trial 是 SQLyog的试用版,有效期30天:试用期过后提示购买之后才能使用:解决办法:修改注册表(过期就得改比较麻烦,但暂时可以用,等有时间了再找其他办法) ...
- 常见Web攻击及解决方案
DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...
- DataFactory生产身份证号码==
生产身份证号:定义数据类型为CHAR()类型的才能进行数据的组合
- Java同步数据结构之SynchronousQueue
前言 严格来说SynchronousQueue并不是像它的名字那样是一种Queue,它更像是一个数据接力的交汇点,还记得在介绍Exchanger的时候提到过Exchanger可以看作是Synchron ...
- 【原创】smarty引擎下的导航按钮高亮实现
<?php$_nvaarr = array( array('name'=>'首页','url'=>'company.php?id='), array('name'=>'公司介绍 ...
- Java 检查IPv6地址的合法性
Java 检查IPv6地址的合法性 由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋. 一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段. 提前了解一些IPv6的知识,还是有必 ...
- xdebug调试的原理
转自 https://segmentfault.com/a/1190000002528341 使用PhpStorm+xdebug单步调试程序可以快速帮助自己熟悉项目代码! 运行原理 在实际使用前,我们 ...
- antd二级联动异步加载
/** * Created by Admin on 2016/9/19. * 批量导入 */ import React, {Component, PropTypes} from "react ...
- Android学习笔记之View
转载: 0.7562018.10.22 21:44:10字数 5,423阅读 189 导图 一.View事件体系 1.什么是 View 和 View的位置坐标 View是什么: View 是一种界 ...
- Windows 10 下如何彻底关闭 Hyper-V 服务
以管理员身份运行命令提示符 执行命令 bcdedit /set hypervisorlaunchtype off 重启,运行vm即可. 如果想要恢复hyper启动 bcdedit / set hype ...