当前位置: 首页 > news >正文

进程遍历模块遍历

// 遍历进程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

相关文章:

  • Linux inode耗尽导致图片/文件无法上传
  • 人生好比挤地铁(地铁育新站)
  • PowerDesinger12.5破解中文版-资源共享与安装介绍
  • FZU 1343 WERTYU --- 水题
  • 困惑:关于angular backbone react
  • 微软资深软件工程师:阅读代码真的很难
  • JavaScript数据格式验证探讨
  • 一步一图一代码,一定要让你真正彻底明白红黑树
  • js处理select操作总结
  • mysql误删除root用户或者忘记root密码时的解决办法(转)
  • 关于android移动开发
  • 前端知识及工具链接
  • 喷墨墨水
  • ajax
  • JavaWeb项目开发案例精粹-第4章博客网站系统-003Dao层
  • [数据结构]链表的实现在PHP中
  • Brief introduction of how to 'Call, Apply and Bind'
  • express如何解决request entity too large问题
  • Javascript设计模式学习之Observer(观察者)模式
  • oldjun 检测网站的经验
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SOFAMosn配置模型
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Sublime text 3 3103 注册码
  • tensorflow学习笔记3——MNIST应用篇
  • 记录:CentOS7.2配置LNMP环境记录
  • 简单实现一个textarea自适应高度
  • 前端相关框架总和
  • 前嗅ForeSpider教程:创建模板
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 运行时添加log4j2的appender
  • 正则表达式小结
  • Python 之网络式编程
  • 大数据全解:定义、价值及挑战
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一) storm的集群安装与配置
  • (转)ABI是什么
  • (转)Windows2003安全设置/维护
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .Mobi域名介绍
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .Net 应用中使用dot trace进行性能诊断
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET微信公众号开发-2.0创建自定义菜单
  • /*在DataTable中更新、删除数据*/
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [GYCTF2020]Ez_Express