Интересует вопрос - как проверять открыто ли приложение, и , если да - закрывать его. (C++)
Заранее спасибо.
Заранее спасибо.
/*
Функция убивает заданный процесс.
lpProcessName - название процесса.
Функция возвращает true если процесс был найден и убит и false при ошибке.
*/
bool KillProcess(
__in LPCWSTR lpProcessName
)
{
bool bRet = false;
if (!lpProcessName)
{
return bRet;
}
HANDLE hSnapshot = NULL;
do
{
PROCESSENTRY32W PE32 = { 0 };
PE32.dwSize = sizeof(PROCESSENTRY32W);
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
#ifdef _DEBUG
MessageBoxW(NULL, L"CreateToolhelp32Snapshot failed", NULL, MB_OK | MB_ICONERROR);
#endif
break;
}
if (!Process32FirstW(hSnapshot, &PE32))
{
#ifdef _DEBUG
MessageBoxW(NULL, L"Process32FirstW failed", NULL, MB_OK | MB_ICONERROR);
#endif
break;
}
while (Process32NextW(hSnapshot, &PE32))
{
if (lstrcmpW(PE32.szExeFile, lpProcessName) == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PE32.th32ProcessID);
if (!hProcess)
{
#ifdef _DEBUG
MessageBoxW(NULL, L"OpenProcess failed", NULL, MB_OK | MB_ICONERROR);
#endif
break;
}
if (!TerminateProcess(hProcess, 0))
{
#ifdef _DEBUG
MessageBoxW(NULL, L"TerminateProcess failed", NULL, MB_OK | MB_ICONERROR);
#endif
break;
}
bRet = true;
}
}
} while (false);
if (hSnapshot)
{
CloseHandle(hSnapshot);
}
return bRet;
}