win32查找指定进程名称(含路径)的pid
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);
std::wstring sFile(L"");
do
{
sFile = pe.szExeFile;
if (0 == sFile.compare(sExeName))
{
nPid = pe.th32ProcessID;
break;
}
} while (::Process32Next(hSnapShot, &pe));
::CloseHandle(hSnapShot);
return nPid;
}
win32执行命令行无黑窗口
std::wstring ExecCmd(const std::wstring cmd)
{
std::wstring sRet(L"");
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;
}
STARTUPINFO si = { sizeof(STARTUPINFO) };
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdError = hWrite;
si.hStdError = hWrite;
si.hStdOutput = hWrite;
PROCESS_INFORMATION pi;
if (!CreateProcess(NULL,
(LPWSTR)cmd.c_str(),
NULL,
NULL,
TRUE,
NULL,
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的进程