C语言结束进程

2017-08-24  本文已影响9人  拼命微笑轻狂丶书生

最近做的一个项目中,运行结束时总会有进程残留,特地上网找了一份结束进程的代码,现在贴出来给大家参考:

BOOL KillProcessFromName(CString strProcessName)

{

        //创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)

        HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        //PROCESSENTRY32进程快照的结构体

        PROCESSENTRY32 pe;

        //实例化后使用Process32First获取第一个快照的进程前必做的初始化操作

        pe.dwSize = sizeof(PROCESSENTRY32);

        //下面的IF效果同:

        //if(hProcessSnap == INVALID_HANDLE_VALUE)  无效的句柄

        if (!Process32First(hSnapShot, &pe))

        {

                return FALSE;

        }

        //将字符串转换为小写

        strProcessName.MakeLower();

        //如果句柄有效  则一直获取下一个句柄循环下去

        while (Process32Next(hSnapShot, &pe))

        {

                //pe.szExeFile获取当前进程的可执行文件名称

                CString scTmp = pe.szExeFile;

                //将可执行文件名称所有英文字母修改为小写

                scTmp.MakeLower();

                //比较当前进程的可执行文件名称和传递进来的文件名称是否相同

                //相同的话Compare返回0

                if (!scTmp.Compare(strProcessName))

                {

                        //从快照进程中获取该进程的PID(即任务管理器中的PID)

                        DWORD dwProcessID = pe.th32ProcessID;

                        HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);

                        ::TerminateProcess(hProcess, 0);

                        CloseHandle(hProcess);

                        return TRUE;

                }

                scTmp.ReleaseBuffer();

        }

        strProcessName.ReleaseBuffer();

        return FALSE;

}

这个是通过进程名来结束进程的,希望对大家有帮助。

上一篇下一篇

猜你喜欢

热点阅读