SDK 操作 list-view control 实例 -- 遍历进程

遍历窗口,获得控件句柄

1 EnumChildWindows(hwndDlg, (WNDENUMPROC)EnumChildProc, NULL);

回调函数

 1 BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam )
 2 {
 3     char strCLSName[MAXBYTE] = {0};
 4     GetClassName(hwnd, strCLSName, MAXBYTE);
 5     if (strcmp(strCLSName, "SysListView32") == 0)//找到列表控件
 6     {
 7         InsertColumn(hwnd);//添加标题
 8         EnumProgress(hwnd);//添加内容
 9         return true;//结束遍历
10     }
11
12     return false;//继续遍历子窗口
13 }

添加标题

 1 void InsertColumn(HWND hList)
 2 {
 3     LV_COLUMN lvc = {0};
 4
 5     lvc.mask = LVCF_TEXT | LVCF_WIDTH;
 6     lvc.pszText = "PID";
 7     lvc.cx = 80;
 8     SendMessage(hList, LVM_INSERTCOLUMN, 0, (long)&lvc);
 9     lvc.pszText = "父进程PID";
10     lvc.cx = 100;
11     SendMessage(hList, LVM_INSERTCOLUMN, 1, (long)&lvc);
12     lvc.pszText = "映像名称";
13     lvc.cx = 200;
14     SendMessage(hList, LVM_INSERTCOLUMN, 2, (long)&lvc);
15 }

添加内容

 1 BOOL EnumProgress(HWND hList)
 2 {
 3     BOOL bRet = FALSE;
 4     HANDLE hProcessSnap = NULL;
 5
 6     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 7     if (hProcessSnap == INVALID_HANDLE_VALUE)
 8     {
 9         return FALSE;
10     }
11
12     PROCESSENTRY32 pe32 = {0};
13     pe32.dwSize = sizeof(PROCESSENTRY32);
14     if (Process32First(hProcessSnap, &pe32))
15     {
16         LVITEM lvi = {0};
17         lvi.mask = LVIF_TEXT;
18         char strTmp[MAXBYTE] = {0};
19         do
20         {
21             ZeroMemory(strTmp, MAXBYTE);
22             sprintf(strTmp, "%d", pe32.th32ProcessID);
23             lvi.iItem = 0;
24             lvi.iSubItem = 0;//发送LVM_INSERTITEM消息时,subitem必须为0
25             lvi.pszText = strTmp;
26             int nIndx = SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&lvi);//返回值为item的索引
27
28             ZeroMemory(strTmp, MAXBYTE);
29             sprintf(strTmp, "%d", pe32.th32ParentProcessID);
30             lvi.iItem = nIndx;
31             lvi.iSubItem = 1;
32             lvi.pszText = strTmp;
33             SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvi);
34
35             lvi.iSubItem = 2;
36             lvi.iItem = nIndx;
37             lvi.pszText = pe32.szExeFile;
38             SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lvi);
39         }
40         while (Process32Next(hProcessSnap, &pe32));
41         bRet = TRUE;
42     }
43     else
44     {
45         bRet = FALSE;
46     }
47
48     CloseHandle (hProcessSnap);
49     return bRet;
50 }

SDK 操作 list-view control 实例 -- 遍历进程

时间: 2024-10-11 20:23:34

SDK 操作 list-view control 实例 -- 遍历进程的相关文章

jQuery使用(十一):jQuery实例遍历与索引

each() children() index() 一.jQuery实例遍历方法each() jQuery实例上的each()方法规定要运行的函数,并且给函数传入两个参数:index,element.这个方法本身应用非常的简单,所以要来点不简单的东西,请看以下代码: <ul> <li></li> <li></li> <li></li> </ul> //js //需求一是将每个li的索引值作为文本添加给对应的li

VBS操作JS网页元素实例

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0'' NAME: '' AUTHOR: Microsoft , Microsoft' DATE : 2014/8/14'' COMMENT: ''==========================

VC中遍历进程并获取进程信息

代码如下: /***************************************************/ /* 函数: 遍历进程信息 /* 参数:进程名称 例如: aaa.exe /* 返回: 无 /* 创建人: 日期 内容 /* 金胖胖 2015年2月26日 新建 /***************************************************/ void CUIConsoleDlg::GetAllProcessInfo(char* szExeFile)

创建WRAPPER时, SQL20076N 未对指定的操作启用数据库的实例。

您可以通过运行DB2 UPDATE DBM CFG USING FEDERATED YES来设置这个参数.修改这个参数后,必须重新启动实例才会生效(DB2STOP/DB2START).所以你会出现你的 那个错误: 未启动实例 本文说明的是在同一个数据库实例中,在源数据库dbsrc中访问目标库dbtarget的表table1的方法 用户名:usr,密码:pwd db2 版本: UDB FOR AIX 8.2.2 OS: Microsoft Windows XP Professional versi

linux:如何防止程序开启两个实例(进程)?

有时候不小心开启同一个程序两次会造成意想不到的错误,下面介绍一种方法,可以防止出现这种情况,测试可用. 在程序中添加如下代码 1 #include <unistd.h> 2 #include <signal.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <errno.h> 6 #include <fcntl.h> 7 #include <fstrea

C#操作session的类实例

本文实例讲述了C#操作session的类.分享给大家供大家参考.具体分析如下: 这个C#类对session操作进行了再次封装,可以大大简化session的常用操作,同时这个类可以将session值设置为数组,也可以将值读取为数组列表,如果你有这方面的需要可以使用这个类,扩这自己对这个C#类进行扩展. using System.Web; namespace DotNet.Utilities { public static class SessionHelper2 { /// <summary>

C#操作CSV文件类实例

本文实例讲述了C#操作CSV文件类.分享给大家供大家参考.具体分析如下: 这个C#类用于转换DataTable为CSV文件.CSV文件转换成DataTable,如果需要进行CSV和DataTable之间进行转换,使用这个类非常合适. using System.Data; using System.IO; namespace DotNet.Utilities { /// <summary> /// CSV文件转换类 /// </summary> public static class

99.遍历进程并直接写入内存

包含头文件 1 //进程快照 2 #include<TlHelp32.h> 进程名 1 //进程名 2 #define exename "PlantsVsZombies.exe" 创建进程快照 1 HANDLE hpro=NULL; 2 3 //存储进程快照信息 4 PROCESSENTRY32 pe32 = { 0 }; 5 6 //设置进程快照结构体大小 7 pe32.dwSize = sizeof(pe32); 8 9 //创建进程快照 10 HANDLE hproc

Scene View Control Bar场景视图控制条

场景视图控制栏 场景视图控制栏允许您选择用于查看场景的各种选项,还可以控制是否启用照明和音频.这些控件仅在开发过程中影响场景视图,对构建的游戏没有影响. Scene View Control Bar 场景视图控制栏 第一个下拉框是选择绘图模式:你可以选择去查看整个场景纹理,线框架,或纹理与线框架覆盖.在游戏发布时,它不对你的游戏有影响. :场景中灯光打开与关闭 :切换天空球.雾效.光晕的显示与隐藏 :切换声音的开关 :单击三角符号可以显示或隐藏场景中用到的光源.声音.摄像机等对象的图标 :查找物