任务管理器
任务管理器
使用VS、MFC、ListCtrl控件
原理
操作系统将所有的进程信息放在一个只读的链表中, 找到这个链表, 读取下来显示即可
函数
CreateToolhelp32Snapshot(); // 用来获取系统中正在运行的进程、线程信息, 返回一个句柄
Process32First(); // 获取链表头
Process32Next(); // 遍历链表
OpenProcess(); // 通过进程ID获取进程句柄
Terminateprocess(); // 通过进程句柄杀死进程
代码
m_lstCtrl.insertColumn(0, L"name", LVCFMT_LEFT, 100); m_lstCtrl.insertColumn(1, L"threadnum", LVCFMT_LEFT, 100); m_lstCtrl.insertColumn(2, L"id", LVCFMT_LEFT, 100); m_lstCtrl.SetExtemdedStyle(LVS_EX_FULLROWSELECT); // 设置风格
void ShowProcess() { WCHAR szbuf[100] = {0}; HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if (INVALID_HANDLE_VALUE == hSnapShot) return ; PROCESSENTERY32 pe = {sizeof(PROCESSENTERY32)}; BOOL bFlag = Process32First(hSnapShot, &pe); while (bFlag == true) { m_lstctrl.InsertItem(0, pe.szExeFile); // 显示到控件上 _itow_s(pe.cntThreads, szbuf, sizeof(buf), 10); m_lstctrl.InsertItem(0, 1, szbuf); // 显示到控件上 _itow_s(pe.th32ProcessID, szbuf, sizeof(buf), 10); m_lstctrl.InsertItem(0, 2, szbuf); // 显示到控件上 bFlag = Process32Next(hSnapShot, &pe); } }
void OnBnClickedButton1() { int nIndex = m_lstCtrl.GetSlectionMark(); if (-1 == nIndex) return ; CString strProcessId = m_lstCtrl.GetItemText(nIndex, 2); HANDLE handle = OpenProcess(PROCESS_TERMINATE, NULL, _wtoi(strProcessId)); if (handle) { TerminateProcess(handle, -1);
lstCtrl.delteItem(nIndex); } }

浙公网安备 33010602011771号