进程遍历模块遍历

// 遍历进程Dlg.cpp : 实现文件
//

#include "stdafx.h"
#include "遍历进程.h"
#include "遍历进程Dlg.h"
#include "afxdialogex.h"
#include <windows.h>
#include <TlHelp32.h>
#include <locale.h>
#include "MyListCtrll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
    CAboutDlg();

// 对话框数据
    enum { IDD = IDD_ABOUTBOX };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// C遍历进程Dlg 对话框



C遍历进程Dlg::C遍历进程Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(C遍历进程Dlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void C遍历进程Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST1,obj_MyList);
}

BEGIN_MESSAGE_MAP(C遍历进程Dlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &C遍历进程Dlg::OnLvnItemchangedList1)
    ON_BN_CLICKED(IDC_BUTTON1, &C遍历进程Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()


// C遍历进程Dlg 消息处理程序

BOOL C遍历进程Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标
    obj_MyList.InsertCol(3, L"进程ID", 100, L"进程名", 270, L"父进程",150);
    
    // TODO:  在此添加额外的初始化代码
    /*m_MylistCtrl.InsertColumn(0, TEXT("进程ID"), 0, 100);
    m_MylistCtrl.InsertColumn(1, TEXT("进程名"), 0, 270);
    m_MylistCtrl.InsertColumn(2, TEXT("父进程"), 0, 150);*/

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void C遍历进程Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialogEx::OnSysCommand(nID, lParam);
    }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void C遍历进程Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使图标在工作区矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR C遍历进程Dlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}



void C遍历进程Dlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO:  在此添加控件通知处理程序代码
    *pResult = 0;
}

//转为宽字符宏
#define CHAR_TO_WCHAR(lpChar,lpW_Char) MultiByteToWideChar(CP_ACP,NULL,lpChar,-1,lpW_Char,_countof(lpW_Char));
void C遍历进程Dlg::OnBnClickedButton1()
{
    // TODO:  在此添加控件通知处理程序代码


    

    obj_MyList.DeleteAllItems();

    HANDLE hSnap = NULL;

    PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };

    //1 创建一个快照
    hSnap =
        CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    //2 找到第一个进程
    if (Process32First(hSnap, &pe32) == 0)
    {
        CloseHandle(hSnap);
        return;
    }
    //3 循环遍历进程
    int i = 0;
    do
    {
        TCHAR lpW_Char[200] = {};
        TCHAR lpW_Char1[200] = {};
        TCHAR lpW_Char2[200] = {};
        _stprintf_s(lpW_Char, 200, _T("%s"), pe32.szExeFile);
        _stprintf_s(lpW_Char1, 200, _T("%d"), pe32.th32ParentProcessID);
        _stprintf_s(lpW_Char2, 200, _T("%d"), pe32.th32ProcessID);
        obj_MyList.InsertOnLineItem(3, lpW_Char2, lpW_Char, lpW_Char1);
    
        i++;


        /*    obj_MyList.InsertOnLineItem(4, L"2009", L"9月5日", L"清华大学附中", L"班长");
            obj_MyList.InsertOnLineItem(4, L"2011", L"9月5日", L"清华大学", L"学生会主席");*/
            /*TCHAR lpW_Char[200] = {};
            m_MylistCtrl.InsertItem(i, TEXT(""));
            m_MylistCtrl.SetItemText(i, 0, (LPCTSTR)pe32.th32ProcessID);
            _stprintf_s(lpW_Char,200, _T("%s"),pe32.szExeFile);
            m_MylistCtrl.SetItemText(i, 1, lpW_Char);
            m_MylistCtrl.SetItemText(i, 2, (LPCTSTR)pe32.th32ParentProcessID);
            i++;
            */

    } while (Process32Next(hSnap, &pe32));


    //遍历模块-----未完成
    // 05 遍历模块.cpp : 定义控制台应用程序的入口点。
    //

//#include "stdafx.h"
//#include <windows.h>
//#include <TlHelp32.h>
//    bool GetModuleList(DWORD dwPId) {
//        HANDLE        hModuleSnap = INVALID_HANDLE_VALUE;
//        MODULEENTRY32 me32 = { sizeof(MODULEENTRY32) };
//        // 1. 创建一个模块相关的快照句柄
//        hModuleSnap = CreateToolhelp32Snapshot(
//            TH32CS_SNAPMODULE,  // 指定快照的类型
//            dwPId);            // 指定进程
//        if (hModuleSnap == INVALID_HANDLE_VALUE)
//            return false;
//        // 2. 通过模块快照句柄获取第一个模块信息
//        if (!Module32First(hModuleSnap, &me32)) {
//            CloseHandle(hModuleSnap);
//            return false;
//        }
//        // 3. 循环获取模块信息
//        do {
//            me32.th32ProcessID;
//            //...
//        } while (Module32Next(hModuleSnap, &me32));
//        // 4. 关闭句柄并退出函数
//        CloseHandle(hModuleSnap);
//        return true;
//    }
//
//    int _tmain(int argc, _TCHAR* argv[])
//    {
//        return 0;
//    }
//

    return;
}
让数据变得更安全!
原文地址:https://www.cnblogs.com/Alyoyojie/p/5304589.html