• XSS.stack #1 – первый литературный журнал от юзеров форума

[C++]Как проверять открыто ли приложение и впоследствии закрывать его?

Пожалуйста, обратите внимание, что пользователь заблокирован
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;
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх