⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumprocessdlg.cpp

📁 《windows程序设计》王艳平版的书籍源代码
💻 CPP
字号:
////////////////////////////////////////////
// EnumProcessDlg.cpp文件

#include "EnumProcessDlg.h"
#include "resource.h"
#include <tlhelp32.h>


CEnumProcessDlg::CEnumProcessDlg(CWnd* pParentWnd):CDialog(IDD_ENUMDIALOG, pParentWnd)
{
}

BOOL CEnumProcessDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 取得列表视图子窗口的控制权
	m_listPro.SubclassWindow(::GetDlgItem(m_hWnd, IDC_PROLIST));

	// 设置属性
	m_listPro.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_listPro.InsertColumn(0, "进程", LVCFMT_LEFT, 120);
	m_listPro.InsertColumn(1, "Pid", LVCFMT_LEFT, 70);

	// 更新进程列表
	UpdateProcess();

	return FALSE;
}

void CEnumProcessDlg::OnOK()
{
	// 取得当前选中项目的索引
	int nCur = m_listPro.GetNextItem(-1, LVNI_SELECTED);
	if(nCur == -1)
	{
		MessageBox("请选择要打开的进程");
	}
	else
	{
		// 设置线程ID
		m_dwThreadId = (DWORD)m_listPro.GetItemData(nCur);
		// 设置进程ID
		char sz[32] = "";
		m_listPro.GetItemText(nCur, 1, sz, 31);
		m_dwProcessId = (DWORD)atoi(sz);
		// 关闭对话框,返回IDOK
		CDialog::OnOK();
	}
}

void CEnumProcessDlg::UpdateProcess()
{
	// 删除所有的项
	m_listPro.DeleteAllItems();

	int nItem = 0;	// 项计数

	PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) }; 
	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
	if(hProcessSnap == INVALID_HANDLE_VALUE) 
		return; 
	if(::Process32First(hProcessSnap, &pe32)) 
	{ 
		do 
		{ 
			// 插入新项
			m_listPro.InsertItem(nItem, pe32.szExeFile, 0);
	
			// 取得进程ID,设置此项的文本
			char szID[56];
			wsprintf(szID, "%u", pe32.th32ProcessID);
			m_listPro.SetItemText(nItem, 1, szID);

			// 下面的代码将遍历系统内的所有线程,以便找到此进程的主线程
			HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
			THREADENTRY32 te32 = { sizeof(te32) };
			if(::Thread32First(hThreadSnap, &te32))
			{
				do
				{
					if(te32.th32OwnerProcessID == pe32.th32ProcessID)
					{
						// 找到主线程ID号,关联它到当前项
						m_listPro.SetItemData(nItem, te32.th32ThreadID);
						break;
					}
				}
				while(::Thread32Next(hThreadSnap, &te32));
			}
			::CloseHandle(hThreadSnap);
	
			nItem++;
		} 
		while(::Process32Next(hProcessSnap, &pe32)); 
	}
	::CloseHandle(hProcessSnap);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -