看流星社区

 找回密码
 注册账号
查看: 1849|回复: 0

VC 通过进程名 杀掉进程 (KillProcessFromName注释版)

[复制链接]

该用户从未签到

发表于 2014-3-3 19:36:55 | 显示全部楼层 |阅读模式
//kill进程from名字
BOOL KillProcessFromName(LPCSTR lpProcessName)
{
//创建进程快照(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;
    }
    CString strProcessName = lpProcessName;

//将字符串转换为小写
    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;
}
以杀死qq程序为例,我们可以通过下列方式:
KillProcessFromName("qq.exe");
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-15 02:17

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表