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