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

校庆专题网站建设方案站长全网指数查询

校庆专题网站建设方案,站长全网指数查询,服务周到的响应式网站,爱站网使用的是什么网站本项目将通过MFC实现一个进程管理器,如下图详细信息页所示: 一.首先创建一个基于对话框的MFC项目,在静态库中使用MFC 二.在项目默认的对话框中添加一个列表 三.列表添加变量 四.初始化列表 1.设置列表风格和表头 2.填充列表内容 我们需要在…

本项目将通过MFC实现一个进程管理器,如下图详细信息页所示:

一.首先创建一个基于对话框的MFC项目,在静态库中使用MFC

二.在项目默认的对话框中添加一个列表

三.列表添加变量

四.初始化列表

1.设置列表风格和表头

2.填充列表内容

我们需要在列表中填充操作系统中运行的各种进程的信息,因此我们需要一个函数帮助我们遍历运行的进程并获取相关信息

注意:遍历进程时所使用的API,我们需要在对话框头文件中包含相应的头文件

首先声明一个遍历进程填充函数

然后实现这个遍历进程填充函数

3.完善列表初始化

完成以上代码书写以后,便实现了一个简单的没有功能的任务管理器

五.功能实现

接下来实现任务管理器的右键可以结束进程或打开线程列表。线程列表右键结束线程或挂起恢复线程等等功能

1.列表添加一个右键消息处理函数

2.添加一个菜单

3.列表实现点击右键弹出菜单

4.实现刷新功能

5.实现结束进程功能

6.实现创建进程功能

以下是我手搓的代码,建议诸位参考上文的演示,自己也写一个,有助于加深理解


// 任务管理器Dlg.cpp: 实现文件
//#include "pch.h"
#include "framework.h"
#include "任务管理器.h"
#include "任务管理器Dlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ABOUTBOX };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// C任务管理器Dlg 对话框C任务管理器Dlg::C任务管理器Dlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_MY_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void C任务管理器Dlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, m_ProcessList);
}BEGIN_MESSAGE_MAP(C任务管理器Dlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_NOTIFY(NM_RCLICK, IDC_LIST1, &C任务管理器Dlg::OnRclickList1)ON_COMMAND(ID_32771, &C任务管理器Dlg::OnProcessList)ON_COMMAND(ID_32772, &C任务管理器Dlg::OnKillProcess)ON_COMMAND(ID_32773, &C任务管理器Dlg::OnCreateProcess)
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 != nullptr){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);		// 设置小图标// TODO: 在此添加额外的初始化代码m_ProcessList.SetExtendedStyle(LVS_EX_AUTOSIZECOLUMNS | LVS_EX_COLUMNSNAPPOINTS | LVS_EX_FLATSB | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);m_ProcessList.InsertColumn(0, L"进程名", LVCFMT_LEFT, 150 );m_ProcessList.InsertColumn(1, L"进程ID", LVCFMT_LEFT, 100);m_ProcessList.InsertColumn(2, L"父进程ID", LVCFMT_LEFT, 100);m_ProcessList.InsertColumn(3, L"线程数", LVCFMT_LEFT, 100);m_ProcessList.InsertColumn(4, L"优先级", LVCFMT_LEFT, 100);m_ProcessList.InsertColumn(5, L"进程路径", LVCFMT_LEFT, 300);InitProcessList();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::InitProcessList()
{HANDLE hSnp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) };WCHAR wcth32ProcessID[MAX_PATH];//进程IDWCHAR wcth32ParentProcessID[MAX_PATH];//父进程ID WCHAR wccntThreads[MAX_PATH];//线程数WCHAR wcpcPriClassBase[MAX_PATH];//优先级WCHAR wcProcessPath[MAX_PATH];//进程路径BOOL Success = Process32First(hSnp, &pe);DWORD Index = 0;while (Success){HANDLE Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);GetModuleFileNameEx(Process, NULL, wcProcessPath, MAX_PATH);if (Process == NULL){swprintf(wcProcessPath, L"System Module");}swprintf(wcth32ProcessID, L"%d", pe.th32ProcessID);swprintf(wcth32ParentProcessID, L"%d", pe.th32ParentProcessID);swprintf(wccntThreads, L"%d", pe.cntThreads);swprintf(wcpcPriClassBase, L"%d", pe.pcPriClassBase);m_ProcessList.InsertItem(Index, pe.szExeFile);m_ProcessList.SetItemText(Index, 1, wcth32ProcessID);m_ProcessList.SetItemText(Index, 2, wcth32ParentProcessID);m_ProcessList.SetItemText(Index, 3, wccntThreads);m_ProcessList.SetItemText(Index, 4, wcpcPriClassBase);m_ProcessList.SetItemText(Index, 5, wcProcessPath);Index++;Success = Process32Next(hSnp, &pe);}}void C任务管理器Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知处理程序代码POINT pt = {};GetCursorPos(&pt);HMENU hMenu = LoadMenu(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MENU1));hMenu = GetSubMenu(hMenu, 0);TrackPopupMenu(hMenu, TPM_CENTERALIGN, pt.x, pt.y, 0, m_hWnd, NULL);*pResult = 0;
}void C任务管理器Dlg::OnProcessList()
{// TODO: 在此添加命令处理程序代码m_ProcessList.DeleteAllItems();InitProcessList();
}void C任务管理器Dlg::OnKillProcess()
{// TODO: 在此添加命令处理程序代码DWORD dwIndex = (DWORD)m_ProcessList.GetFirstSelectedItemPosition();dwIndex--;CString ProcssID = m_ProcessList.GetItemText(dwIndex, 1);DWORD nProcessID = _ttoi(ProcssID);HANDLE hProcess =  OpenProcess(PROCESS_ALL_ACCESS, NULL, nProcessID);TerminateProcess(hProcess, 1);}void C任务管理器Dlg::OnCreateProcess()
{// TODO: 在此添加命令处理程序代码CFileDialog file(TRUE, L"exe", L"*.exe", OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, L"可执行文件|*.exe|所有文件|.*", NULL);if (file.DoModal() == IDOK){CString FilePath = file.GetPathName();STARTUPINFO si = {};si.cb = sizeof(STARTUPINFO);PROCESS_INFORMATION pi = {};CreateProcess(FilePath, NULL, NULL, NULL, NULL, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);}}

http://www.dtcms.com/wzjs/44487.html

相关文章:

  • 网站搭建准备最近一两天的新闻有哪些
  • wordpress the_tags()windows11优化大师
  • 网站开发认证考试举一个网络营销的例子
  • oppo网站开发设计搜索引擎优化的定义
  • 长沙网站推广排名淘宝搜索关键词排名
  • 小型培训机构网站开发毕业设计推广工具
  • vps网站权限南宁seo做法哪家好
  • 网站建设 app开发英文外链seo兼职在哪里找
  • 建网站需要软件百度官网网站
  • 网站建设网站制作网页优化营商环境的金句
  • 外贸做的亚马逊网站是哪个好seo推广软件品牌
  • 网上兼职做效果图网站免费网站建设制作
  • 做网站的公司热线电话武汉网站seo德升
  • 北京户外广告公司排名福州seo优化排名推广
  • 微商城网站建设多少钱精品成品网站1688
  • 做网站外包大学生市场营销案例150例
  • 100个简单的手工小玩具影视网站怎么优化关键词排名
  • 手机网站微信登陆外贸网站平台都有哪些 免费的
  • 武汉网站建设电话多少钱宁波seo外包引流推广
  • 建立网站的链接结构有哪几种形式简述其各自的优缺点让顾客心动的句子
  • 阿里云服务器做网站安全吗最新国际新闻头条今日国际大事件
  • 茶叶淘宝店网站建设ppt南京seo整站优化技术
  • 计算机网站建设维护的基本知识seo精灵
  • 为什么要建设外贸网站精准信息300099
  • 辽阳网站网站建设seo怎么做
  • 网站导航广告怎么做seo优化网络公司
  • 深圳做品牌网站百度在线扫题入口
  • 手机动态网站开发教程互联网产品营销策划方案
  • 扁平化企业网源码win8风格精简化源码asp带后台企业网站百度投放广告流程
  • 广西网站建设公司免费的个人主页网页制作网站