您的位置:首页 > 其它

VC判断指定程序是否运行,杀掉指定进程

2014-06-25 14:03 561 查看
#include <TlHelp32.h>

/*

名称:        IsRunning

描述:        判断某进程是否存在

参数:

lpszProcessFileName[in]:Pointer to a null-terminated string specifying the name of the executable file for the process

返回:

If the process exists, the return value is an open handle to the specified process.

If the process doesn't exist, the return value is NULL.

约束:        无

其他:        无

*/

HANDLE IsRunning(LPCTSTR lpszProcessFileName, LPPROCESSENTRY32 pe);

HANDLE IsRunning(LPCTSTR lpszProcessFileName, LPPROCESSENTRY32 pe)

{

    BOOL bLoop = TRUE;

    HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    bLoop = Process32First(h, pe);

    while (bLoop)

    {

        bLoop = Process32Next(h, pe);

        TCHAR* ptszExefile = pe->szExeFile;

        if (lstrcmp(ptszExefile,lpszProcessFileName) == 0)

        {

            return OpenProcess(PROCESS_TERMINATE, FALSE, pe->th32ProcessID);

        }

    }

    return NULL;

}

/*

名称:        IsProcessRun

描述:        判断某进程是否存在

参数:

lpszName[in]:Pointer to a null-terminated string  specifying the name of the executable file for the process

返回:

If the process exists, the return value is an open handle to the specified process.

If the process doesn't exist, the return value is NULL.

约束:        无

其他:        无

*/

BOOL IsProcessRun(LPCTSTR lpszName);

BOOL IsProcessRun(LPCTSTR lpszName)

{

    BOOL bLoop = FALSE;

    PROCESSENTRY32 pe;

    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (hProcessSnap == INVALID_HANDLE_VALUE)

    {

        return FALSE;

    }

    pe.dwSize = sizeof(PROCESSENTRY32);

    bLoop = Process32First(hProcessSnap, &pe);

    if (!bLoop)

    {

        CloseHandle(hProcessSnap);

        return FALSE;

    }

    while (bLoop)

    {

        bLoop = Process32Next(hProcessSnap, &pe);

        if (lstrcmp(pe.szExeFile, lpszName) == 0)

        {

            CloseHandle(hProcessSnap);

            return TRUE;

        }

    }

    CloseHandle(hProcessSnap);

    return FALSE;

}

/*

名称:KillProcess

描述:结束调所有名称为lpszProcessName的进程

参数:

lpszProcessName[in]:进程名称

返回:

指定的所有进程已结束,返回TRUE;否则返回FALSE

约束:无

其他:无

*/

BOOL KillProcess(LPCTSTR lpszProcessName);

BOOL KillProcess(LPCTSTR lpszProcessName)

{

    BOOL bLoop = FALSE;

    BOOL bRes = TRUE;

    PROCESSENTRY32 pe;

    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (hProcessSnap == INVALID_HANDLE_VALUE)

    {

        return FALSE;

    }

    pe.dwSize = sizeof(PROCESSENTRY32);

    bLoop = Process32First(hProcessSnap, &pe);

    if (!bLoop)

    {

        CloseHandle(hProcessSnap);

        return FALSE;

    }

    while (bLoop)

    {

        bLoop = Process32Next(hProcessSnap, &pe);

        if (lstrcmp(pe.szExeFile, lpszProcessName) == 0)

        {

            HANDLE hPec = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID);

            if (hPec)

            {

                if (!TerminateProcess(hPec, 0))

                {

                    bRes = FALSE;

                }

            }

        }

    }

    CloseHandle(hProcessSnap);

    return bRes;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: