C++ Windows进程控制

一、杀死指定进程

// 杀死指定进程
BOOL KillProcessFromName(CString strProcessName)
{
	HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	PROCESSENTRY32 pe;
	pe.dwSize = sizeof(PROCESSENTRY32);
	if (!Process32First(hSnapShot, &pe))
	{
		return FALSE;
	}
	strProcessName.MakeLower();
	while (Process32Next(hSnapShot, &pe))
	{
		CString scTmp = pe.szExeFile;
		scTmp.MakeLower();
		if (!scTmp.Compare(strProcessName))
		{
			DWORD dwProcessID = pe.th32ProcessID;
			HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
			::TerminateProcess(hProcess, 0);
			CloseHandle(hProcess);
			return TRUE;
		}
		scTmp.ReleaseBuffer();
	}
	strProcessName.ReleaseBuffer();
	return FALSE;
}

二、判断指定进程是否存在

// 判断进程是否存在
BOOL IsProcessExit(const WCHAR* strFilename)
{ 
	BOOL bRet = FALSE;	
	HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);	
	if (hProcessSnap == INVALID_HANDLE_VALUE) 
		return FALSE;
	PROCESSENTRY32 pe32 = { 0 };	
	pe32.dwSize = sizeof(PROCESSENTRY32);	
	if (Process32First(hProcessSnap, &pe32)) 
	{ 
		do 
		{ 
			if (_wcsicmp(pe32.szExeFile, strFilename) == 0) 
			{ 
				bRet = TRUE;				
				break; 
			} 
		}
		while (Process32Next(hProcessSnap, &pe32)); 
	} 
	else 
	{ 
		bRet = FALSE; 
	}	
	CloseHandle(hProcessSnap);	
	return bRet; 
}

三、启动指定进程

// 启动进程
void  ProcessStart(CString strSrvName)
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	ZeroMemory(&si, sizeof(si));
	ZeroMemory(&pi, sizeof(pi));
	int num = 0;
	while (!CreateProcess(NULL, (LPWSTR)strSrvName.GetBuffer(), NULL, NULL, false, 0, NULL, NULL, &si, &pi))
	{
		num++;
		if (10 == num)
		{
			WriteLog("启动进程失败");
			break;
		}
	}
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值