win32 查找进程pid

win32查找指定进程名称(含路径)的pid

//遍历系统快照的名字和当前给定的exe名称,看是否匹配,匹配即找到。
DWORD FindProcessId(LPCTSTR sExeName)
{
	DWORD nPid(0);
	//获取系统快照
	HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
	PROCESSENTRY32 pe;
	ZeroMemory(&pe, sizeof(pe));
	pe.dwSize = sizeof(PROCESSENTRY32);
	//查找进程
	::Process32First(hSnapShot, &pe);
	//printError((LPTSTR)L"Process32First");
	std::wstring sFile(L"");
	do
	{
		sFile = pe.szExeFile;
		if (0 == sFile.compare(sExeName))
		{
			nPid = pe.th32ProcessID;
			break;
			//std::cout << ws2s(sFile) << " : " << nPid << std::endl;
		}
	} while (::Process32Next(hSnapShot, &pe));
	//printError((LPTSTR)L"Process32Next");
	::CloseHandle(hSnapShot);
	return nPid;
}

win32执行命令行无黑窗口

std::wstring ExecCmd(const std::wstring cmd)
{
	std::wstring sRet(L"");
	// 创建匿名管道,write->read;
	SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
	HANDLE hRead, hWrite;
	if (!CreatePipe(&hRead, &hWrite, &sa, 0))
	{
		std::cout << "error 1: CreatePipe failed!" << std::endl;
		return sRet;
	}
	// 设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite
	STARTUPINFO si = { sizeof(STARTUPINFO) }; // Pointer to STARTUPINFO structure;
	GetStartupInfo(&si);
	si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
	//si.dwFlags = STARTF_USESHOWWINDOW;
	si.wShowWindow = SW_HIDE; //隐藏窗口;
	si.hStdError = hWrite;
	si.hStdError = hWrite;
	si.hStdOutput = hWrite; //管道的输入端口连接命令行的输出;
	// 启动命令行
	PROCESS_INFORMATION pi;// Pointer to PROCESS_INFORMATION structure;
	if (!CreateProcess(NULL,
		(LPWSTR)cmd.c_str(),
		NULL,
		NULL,
		TRUE,
		//FALSE,          // Set handle inheritance to FALSE
		NULL,
		//0,              // No creation flags
		NULL,
		NULL,
		&si,
		&pi))
	{
		std::cout << "error 2: CreateProcess failed!" << std::endl;
		sRet = L"Cannot create process";
		return sRet;
	}
	CloseHandle(hWrite);//关闭管道的输入端口;
	// 读取命令行返回值
	std::string strRetTmp;
	char buff[1024] = { 0 };
	DWORD dwRead = 0;
	strRetTmp = buff;
	while (ReadFile(hRead, buff, 1024, &dwRead, NULL))//从管道的输出端获取命令行写入的数据;
	{
		strRetTmp += buff;
	}
	CloseHandle(hRead);//关闭管道的输出端口
	LOGI << __FUNCTION__ << " : " << strRetTmp.c_str();
	sRet = StringHelper::AsciiToUnicode(strRetTmp);
	return sRet;
}

强制终止进程命令行

taskkill /F /IM xxx.exe //命令行强制终止指定名称的进程
taskkill /F /pid 123    //命令行强制终止指定pid的进程
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值