Windows进程管理类封装
- 头文件
#include <Windows.h>
#include <iostream>
using namespace std;
#include "stdafx.h"
using namespace std;class ProcessMgr{public:ProcessMgr();~ProcessMgr();static ProcessMgr* GetInstance();// 判断是否进程存在// @params:dw_pid:进程id// @return : true:进程存在,false:进程不存在bool IsProcessExist(DWORD dw_pid)const;// 获取进程句柄// @params:dw_pid:进程id// @return : nullptr:进程句柄为空,else:实际句柄值HANDLE GetProcessHandle(DWORD dw_pid)const;// 退出进程// @param: dw_pid: 进程id// @return: true : 退出成功,false: 退出失败bool KillProcess(DWORD dw_pid) const;// 判断是否进程运行()// @params: str_mutex :根据进程互斥量的方式来进行判断,获取的是自己设定规则打开的进程// @return: true:正在运行 false:没有运行bool IsProcessRunning(std::wstring str_mutex);// 获取当前进程句柄HANDLE GetCurrentProcess();private:static ProcessMgr* m_pProcessMgr;
};
- 实现文件
// ProcessMgr.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "ProcessMgr.h"
#include <process.h>
#include <TlHelp32.h>
using namespace std;#define g_pProcessMgr ProcessMgr::GetInstance()#define SAFE_DELETE(xxx) \CloseHandle(xxx);\xxx = NULL;ProcessMgr::ProcessMgr()
{}ProcessMgr::~ProcessMgr()
{}ProcessMgr* ProcessMgr::GetInstance()
{if (m_pProcessMgr!=nullptr){m_pProcessMgr = new ProcessMgr();return m_pProcessMgr;}return m_pProcessMgr;
}bool ProcessMgr::IsProcessExist(DWORD dw_pid)const
{PROCESSENTRY32 pe;pe.dwSize = sizeof(PROCESSENTRY32);HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);if(hSnapshot == INVALID_HANDLE_VALUE){cout << "进程不存在" << endl;CloseHandle(hSnapshot);return false;}BOOL bFindProcess = ::Process32First(hSnapshot,&pe);if (bFindProcess){do {if (pe.th32ProcessID == dw_pid){cout << "进程存在" << endl;CloseHandle(hSnapshot);return true;}} while (::Process32Next(hSnapshot,&pe));}cout << "进程不存在" << endl;CloseHandle(hSnapshot);return false;
}HANDLE ProcessMgr::GetProcessHandle(DWORD dw_pid)const
{HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS ,NULL,dw_pid);if (hHandle != nullptr){return hHandle;}else{cout << "获取句柄为空" << endl;CloseHandle(hHandle);return nullptr;}
}bool ProcessMgr::KillProcess(DWORD dw_pid)const
{HANDLE hProcess = GetProcessHandle(dw_pid);if (hProcess!=nullptr){return TerminateProcess(hProcess,IDOK);}// 关闭句柄SAFE_DELETE(hProcess);return false;}bool ProcessMgr::IsProcessRunning(std::wstring str_mutex)
{HANDLE hMutex = CreateMutex(NULL,FALSE,str_mutex.c_str());DWORD err_code = GetLastError();if (hMutex){if (ERROR_ALREADY_EXISTS == err_code){return true; //正在运行}::CloseHandle(hMutex);}return false;
}HANDLE ProcessMgr::GetCurrentProcess()
{return ::GetCurrentProcess();
}ProcessMgr* ProcessMgr::m_pProcessMgr = nullptr;int _tmain(int argc, _TCHAR* argv[])
{g_pProcessMgr->GetProcessHandle(71992);system("pause");return 0;
}
Windows进程管理类封装相关推荐
- 操作系统课设之Windows 进程管理
前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...
- Windows 进程管理
Windows 进程管理 1.问题描述 遇到的问题:4000端口被占用(福昕PDF占用4000端口号) 问题描述:启动微服务出现如下报错 Description:The Tomcat connecto ...
- windows进程管理问题
Windows进程管理 Windows 所创建的每个进程都从调用CreateProcess()API函数开始, 其函数的任务是在对象管理器子系统内初始化进程对象. 每一个进程都以调用ExitProce ...
- Linux中的进程管理类、ps 查看当前系统进程状态、内存置换算法LRU、查看与sshd相关进程
文章目录 1.10 进程管理类 1.10.1 ps 查看当前系统进程状态 1.10.1.1基本语法 1.10.1.2选项说明 1.10.1.3功能说明 1.10.1.4经验技巧 1.10.1.5内存置 ...
- 操作系统实验:Windows进程管理
实验项目名称: Windows进程管理 一.实验目的 1.学习windows系统提供的线程创建.线程撤销.线程同步等系统调用: 2.利用C++实现线程创建.线程撤销.线程同步程序: 3.完成思考.设计 ...
- windows进程管理器_面向Windows,Linux,Mac ,安卓, 木马,密码破解内存提取基于KPCR结构的技术研究...
Windows内存分析原理 内存镜像存储的是二进制数据,内存取证分析的任务就是从这些貌似毫无意义的二进制数据中找到系统的运行信息.这些二进制数据从根本上说,其来源都是操作系统的内存分配.为何分配.如何 ...
- C++ Windows进程管理
功能: 1.各个进程启动.挂起.恢复.停止等 2.监听进程的运行状态,进程退出(正常.非正常)时,通知用户 3.异步队列 4.线程安全 进程管理器类: #ifndef __ProcessManager ...
- 操作系统课设——Windows 进程管理
一.实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序). (2)通过创建进程.观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操 ...
- windows进程管理器_探究 Process Explorer 进程树选项灰色问题
本文为看雪论坛优秀文章 看雪论坛作者ID:jishuzhain 前言 Process Explorer是由SysInternals创建的用于Microsoft Windows的免费任务管理器和系统监视 ...
最新文章
- 解决ros安装 使用roscore命令测试问题
- [日常] Go语言圣经-函数递归习题
- 博弈论-囚徒困境与重复囚徒困境的启示
- Java生鲜电商平台-统一异常处理及架构实战
- saltstack的安装(转载连接)
- 人工智能python基础知识_AI 人工智能基础知识-习题
- 计算机科学与技术专业大学排名2020,2020计算机科学与技术专业最好大学排名:160余所大学上榜...
- sql 触发器未触发_SQL触发器–综合指南
- 重写与重载(摘抄笔记)
- Linux系统工具sar查看主机性能指标(内存、CPU、IO)
- 太干了,全网最全的Matplotlib可视化教程
- ionic2 中的网络监测功能
- php英文怎么读,100的英文怎么读_单词及读音
- Maven assembly打包文件被覆盖问题
- Chrome源码剖析 【五】
- 稀疏矩阵的三元组顺序表存储表示及基本操作
- 使用docker创建web界面和创建使用MySQL
- 句向量 Sentence Embedding
- Macbook pro终端中文乱码
- 【VSCode】切换文件与编辑器的快捷键
热门文章
- 今天听阿里P8讲完SpringBoot,瞬间感觉自己白学了……
- c 语言比较三个整数大小,C 语言 —— 比较三个整数的大小并从大到小输出
- 隐形Euler方法的java程序_常微分方程的解法 (二): 欧拉(Euler)方法
- 每天干的啥?(2018.06)
- NOIP2013D1T3货车运输(最大生成树+倍增lca)
- 面试题28:字符串全排列
- Deepin 2015 安装惠普打印机驱动
- java排序学习笔记
- User Word Automation Services and Open XML SDK to generate word files in SharePoint2010
- Sqlserver常用函数例子说明