吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 790|回复: 2
收起左侧

[已解决] 关于进程模块遍历重复问题

[复制链接]
A学习的小菜鸟 发表于 2024-4-14 10:43
25吾爱币
近期学习进程相关知识,我是用diaDlg模仿lordPE这个软件的开始界面,遍历进程的,但是在进程遍历模块的时候发现,我点一下进程pid,模块会给我重复打印,我已经初始化了模块的list,但是他依然给我重复打印,想问一下,我代码应该怎样修改,求教。进程模块遍历代码如下:
这段代码是指定某个进程pid,然后根据进程pid遍历相关模块的,目的是我点feige这个进程,模块列表只给我显示feige的模块,然后我点notepad的进程,只给我显示notepad的模块

void modulesview(HWND hwndDlg)
{
        LV_COLUMN lv;
        HWND hlistmodules;
        //初始化
        memset(&lv,0,sizeof(LV_COLUMN));
        //获取IDC_LIST_PROCESS 句柄
        hlistmodules=GetDlgItem(hwndDlg,IDC_LIST_MOUDLE);
        //设置整行选中
        SendMessage(hlistmodules,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT);
        //第一列                                                               
        lv.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;                                                               
        lv.pszText = TEXT("模块名称");                                //列标题                               
        lv.cx = 200;                                                                //列宽
        lv.iSubItem = 0;                                                               
        //ListView_InsertColumn(hListProcess, 0, &lv);                                                               
        SendMessage(hlistmodules,LVM_INSERTCOLUMN,0,(DWORD)&lv);                                                               
        //第二列                                                               
        lv.pszText = TEXT("模块位置");                                                               
        lv.cx = 300;                                                               
        lv.iSubItem = 1;                                                               
        //ListView_InsertColumn(hListProcess, 1, &lv);                                                               
        SendMessage(hlistmodules,LVM_INSERTCOLUMN,1,(DWORD)&lv);}

void enummodules(HWND hlistprocess,HWND hlistmodules,WPARAM wParam,LPARAM lParam)
{
    DWORD dwrowid;
    TCHAR szpid[20];
    DWORD pid=0;
    LV_ITEM lv;

    //初始化                        
    memset(&lv, 0, sizeof(LV_ITEM));
    lv.mask = LVIF_TEXT; // 指定我们需要的是文本
    lv.iSubItem = 1; // 获取的列
    lv.pszText = szpid; // 指定储存结果的缓冲区
    lv.cchTextMax = sizeof(szpid)/sizeof(szpid[0]); // 指定缓存区大小

    // 获取选择行
    dwrowid = SendMessage(hlistprocess, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
    if (dwrowid == -1)
    {
        MessageBox(NULL, TEXT("请选择进程"), TEXT("出错了"), MB_OK);
        return;
    }

    // 获取PID
    SendMessage(hlistprocess, LVM_GETITEMTEXT, dwrowid, (LPARAM)&lv);
         // 解析PID
        sscanf(szpid, "%x", &pid);
    HANDLE moudle = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
    MODULEENTRY32 mi;
    mi.dwSize = sizeof(MODULEENTRY32); // 初始化
        TCHAR buffer[0x20];
        memset(buffer,0,0x20);
        //初始化
        LV_ITEM lvitem;
        memset(&lvitem, 0, sizeof(LV_ITEM));
        lvitem.mask = LVIF_TEXT;
        lvitem.iItem = ListView_GetItemCount(hlistmodules);
        BOOL num=Module32First(moudle, &mi);
        sprintf(buffer,"%s",mi.szModule);
        // 添加模块名到列表
        lvitem.pszText = TEXT(buffer);
        lvitem.iItem=0;
        lvitem.iSubItem = 0;
        ListView_InsertItem(hlistmodules, &lvitem);

        sprintf(buffer,"%s",mi.szExePath);
        // 添加模块路径到列表
        lvitem.pszText =TEXT(buffer);
        lvitem.iItem=0;
        lvitem.iSubItem = 1;
        ListView_SetItem(hlistmodules, &lvitem);
    CloseHandle(moudle);
}
相关效果图如下:
QQ截图20240414103348.jpg 2.jpg
昨天搞了一下午,实在不知道怎么处理了,向大神求教

最佳答案

查看完整内容

你这应该是list控件没清空,你在点击时,清空list,再往里写,在响应时加一条 ListView_DeleteAllItems(hlistmodules); 然后再写就行了

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gchq2005 发表于 2024-4-14 10:43
你这应该是list控件没清空,你在点击时,清空list,再往里写,在响应时加一条
ListView_DeleteAllItems(hlistmodules); 然后再写就行了
 楼主| A学习的小菜鸟 发表于 2024-4-14 16:03
gchq2005 发表于 2024-4-14 13:33
你这应该是list控件没清空,你在点击时,清空list,再往里写,在响应时加一条
ListView_DeleteAllItems(hl ...

嗯嗯,真的谢谢你
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 19:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表