Win32 通过进程名获取经常id,并关闭进程

本文详细介绍了使用C++进行进程管理的方法,包括获取进程ID和关闭进程的具体实现。通过ProcessManager类,演示了如何利用Windows API函数如CreateToolhelp32Snapshot、Process32First和TerminateProcess来实现进程的查找和终止。
摘要由CSDN通过智能技术生成

ProcessManager.h 头文件:

#pragma once
class ProcessManager
{
public:
 ProcessManager();
 ~ProcessManager();
public:
 static unsigned int GetProcessID(wchar_t *cPorcessName);
 static bool CloseProcess(unsigned int unProcessID);

};

ProcessManager.cpp 源文件:

#include"stdafx.h"
#include <Windows.h>
#include <Psapi.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <stdlib.h>
#include "ProcessManager.h"
#pragma comment(lib, "Psapi.lib")


ProcessManager::ProcessManager()

{

}
ProcessManager::~ProcessManager()

{

}
unsigned int ProcessManager::GetProcessID(wchar_t *cPorcessName)
{
 HANDLE hProcess = NULL;
 PROCESSENTRY32 prry;
 prry.dwSize = sizeof(PROCESSENTRY32);
 BOOL bRet;
 wchar_t* pmbbuf = new wchar_t[260];
 if (NULL == pmbbuf)
 {
  return 0;
 }
 hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 bRet = Process32First(hProcess, &prry);
 while (bRet)
 {
  memset(pmbbuf, 0, 260);
  swprintf_s(pmbbuf, 260, L"%s", prry.szExeFile);
  if (0 == wcscmp(pmbbuf, cPorcessName))
  {
   //找到后返回进程ID
   delete pmbbuf;
   pmbbuf = NULL;
   return prry.th32ProcessID;
  }
  else
  {
   //查找下一个进程
   bRet = Process32Next(hProcess, &prry);
  }


 };
 delete pmbbuf;
 pmbbuf = NULL;
 return 0;
}
bool ProcessManager::CloseProcess(unsigned int unProcessID)
{
 HANDLE bExitCode = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE

         | PROCESS_ALL_ACCESS, FALSE, unProcessID);

 //WaitForSingleObject(bExitCode, INFINITE);
 if (NULL != bExitCode)

 {
  BOOL bFlag = TerminateProcess(bExitCode, 0);
  CloseHandle(bExitCode);
  return true;
 }
 return false;
}

测试文件:

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"ProcessManager.h"
#include<windows.h>
int main()
{
 wchar_t* ProcessName = L"notepad.exe";
 //ProcessNameToPid(ProcessName);

 ProcessManager pro;
 DWORD V = pro.GetProcessID(ProcessName);
 pro.CloseProcess(V);

 //GetProID(ProcessName);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值