长春做网站 长春万网/手机网站建设价格

长春做网站 长春万网,手机网站建设价格,酒店 网站构建,西安做营销型网站本项目将通过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.mzph.cn/diannao/70863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG-202502

目录 RAG场景的坑知识等级金字塔 初级RAG存在的问题高级RAG索前优化检索优化检索后优化 优化经验总结参考 RAG场景的坑 晦涩的专业术语 误区&#xff1a;在专业领域中。许多文献和资料中充满了专业术语&#xff0c;这些术语对于非专业人士&#xff08;甚至是大模型&#xff0…

STM32-智能小车项目

项目框图 ST-link接线 实物图&#xff1a; 正面&#xff1a; 反面&#xff1a; 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 测速模块 语音模块SU-03T 网站&#xff1a;智能公元/AI产品零代码平台 一、让小车动起来 新建文件夹智能小车项目 在里面…

【Linux】vim 设置

【Linux】vim 设置 零、起因 刚学Linux&#xff0c;有时候会重装Linux系统&#xff0c;然后默认的vi不太好用&#xff0c;需要进行一些设置&#xff0c;本文简述如何配置一个好用的vim。 壹、软件安装 sudo apt-get install vim贰、配置路径 对所有用户生效&#xff1a; …

17164字符迁移

17164字符迁移 ⭐️难度&#xff1a;中等 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int q scanner.nextInt();scanner.next…

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决 问题描述 在使用 IntelliJ IDEA 开发 Spring Boot 应用时&#xff0c;有时即使关闭了应用&#xff0c;程序仍然占用端口&#xff08;例如&#xff1a;4001 端口&#xff09;。这会导致重新启动应用时出现端口被占用的错误&a…

QT:QPen、QBrush、与图形抗锯齿的关联

QPen QPen 是 Qt 框架中用于定义绘图时使用的画笔属性的类。在使用 QPainter 进行 2D 绘图时&#xff0c;QPen 可以控制线条的外观&#xff0c;比如线条的颜色、宽度、样式&#xff08;如实线、虚线等&#xff09;、端点样式&#xff08;如方形端点、圆形端点等&#xff09;和…

论文笔记(七十二)Reward Centering(三)

Reward Centering&#xff08;三&#xff09; 文章概括摘要3 基于值的奖励中心化4 案例研究&#xff1a; 以奖励为中心的 Q-learning5 讨论、局限性与未来工作致谢 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan…

单例模式——c++

一个类&#xff0c;只能有1个对象 (对象在堆空间) 再次创建该对象&#xff0c;直接引用之前的对象 so构造函数不能随意调用 so构造函数私有 so对象不能构造 如何调用私有化的构造函数: 公开接口调用构造函数 调用构造函数&#xff1a;singleTon instance&#xff1b; 但…

NLP学习记录十:多头注意力

一、单头注意力 单头注意力的大致流程如下&#xff1a; ① 查询编码向量、键编码向量和值编码向量分别经过自己的全连接层&#xff08;Wq、Wk、Wv&#xff09;后得到查询Q、键K和值V&#xff1b; ② 查询Q和键K经过注意力评分函数&#xff08;如&#xff1a;缩放点积运算&am…

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴&#xff1a;可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题&#xff0c;并非是软件内自主实现的PDF合并&#xff0c;而是调用的pdftk这一工具&#xff0c;但楼主并没有提供pdftk&#xff0c;而…

渗透测试【seacms V9】

搭建seacms环境 我选择在虚拟机中用宝塔搭建环境 将在官网选择的下载下来的文件解压后拖入宝塔面板的文件中 创建网站 添加站点 搭建完成seacmsV9 找到一个报错口 代码分析 <?php set_time_limit(0); error_reporting(0); $verMsg V6.x UTF8; $s_lang utf-8; $dfDbn…

论文阅读笔记:Continual Forgetting for Pre-trained Vision Models

论文阅读笔记&#xff1a;Continual Forgetting for Pre-trained Vision Models 1 背景2 创新点3 方法4 模块4.1 问题设置4.2 LoRA4.3 概述4.4 GS-LoRA4.5 损失函数 5 效果6 结论 1 背景 出于隐私和安全考虑&#xff0c;如今从预先训练的视觉模型中删除不需要的信息的需求越来…

车载DoIP诊断框架 --- 连接 DoIP ECU/车辆的故障排除

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

【爬虫基础】第二部分 爬虫基础理论 P1/3

上节内容回顾&#xff1a;【爬虫基础】第一部分 网络通讯 P1/3-CSDN博客 【爬虫基础】第一部分 网络通讯-Socket套接字 P2/3-CSDN博客 【爬虫基础】第一部分 网络通讯-编程 P3/3-CSDN博客 爬虫相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff…

ue5 3dcesium中从本地配置文件读取路3dtilles的路径

关卡蓝图中获得3dtiles的引用 拉出设置url 设置路径 至于设置的路径从哪里来 可以使用varest读取文件里的接送字符串 path中配置地址 path变量的值为: Data/VillageStartMapConfig.json此地址代表content的地下的data文件夹里的config.json文件 {"FilePath": &quo…

音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介

一、引言 RTP封装H.264时&#xff0c;RTP对NALU Header的nal_unit_type附加了扩展含义。 由《音视频入门基础&#xff1a;H.264专题&#xff08;4&#xff09;——NALU Header&#xff1a;forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道&#xff0c;nal_unit…

学习记录:初次学习使用transformers进行大模型微调

初次使用transformers进行大模型微调 环境&#xff1a; 电脑配置&#xff1a; 笔记本电脑&#xff1a;I5&#xff08;6核12线程&#xff09; 16G RTX3070&#xff08;8G显存&#xff09; 需要自行解决科学上网 Python环境&#xff1a; python版本:3.8.8 大模型&#xff1a…

【Java学习】Object类与接口

面向对象系列五 一、引用 1.自调传自与this类型 2.类变量引用 3.重写时的发生 二、Object类 1.toString 2.equals 3.hashCode 4.clone 三、排序规则接口 1.Comparable 2.Comparator 一、引用 1.自调传自与this类型 似复刻变量调用里面的非静态方法时&#xff0c;都…

OpenEuler学习笔记(三十五):搭建代码托管服务器

以下是主流的代码托管软件分类及推荐&#xff0c;涵盖自托管和云端方案&#xff0c;您可根据团队规模、功能需求及资源情况选择&#xff1a; 一、自托管代码托管平台&#xff08;可私有部署&#xff09; 1. GitLab 简介: 功能全面的 DevOps 平台&#xff0c;支持代码托管、C…

Transformer 架构 理解

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; Transformer 架构&#xff1a;encoder/decoder 内部细节。 的介绍&#xff0c;说明 Transformer 架构相比当时主流的 RNN/CNN 架构的创新之处&#xff1a; 在 transformer 之前&#xff0c;最先进的架构…