• 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 }
  • 相关阅读:
    C++ primer 简读
    C++函数及类方法(待补充)
    C++参数传递-复制和引用
    c++动态分配内存
    C++内存与指针
    c++循环
    C++容器vector及迭代器对象iterator
    c++字符类型一些知识点
    CNN中卷积运算转化成矩阵乘法的实现——img2col+GEMM大矩阵乘法
    046 LeetCode go
  • 原文地址:https://www.cnblogs.com/luzhiyuan/p/3899088.html
Copyright © 2020-2023  润新知