不知道程序的窗口句柄时结束该程序的进程

博客介绍了判断EXE名字的方法,若只需判断名字可省略EnumProcess,利用pe32.szExeFile获取。还给出了关闭指定EXE程序的代码,通过CreateToolhelp32Snapshot获取进程快照,遍历进程并使用EnumWindows关闭符合条件的程序。

如果只要判断EXE的名字(不需要判断路径),可以省略EnumProcess,因为
pe32.szExeFile 里就已经有EXE的名字了,因为没有路径,所以才又使用了
函数EnumProcess来取得完整的路径。这样就简洁一些了。
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
    DWORD dwID;

    GetWindowThreadProcessId(hwnd, &dwID);
    if (dwID == (DWORD)lParam) {
        PostMessage(hwnd, WM_QUIT, 0, 0);
        return FALSE;
    }
    return TRUE;
}

void KillProgram(LPCSTR ExeName)
{
    char *File;
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;

    if (!ExeName || !ExeName[0])
        return;
    File = strrchr(ExeName, '//');
    if (File!=0) ExeName = File+1;
    hProcessSnap = CreateToolhelp32Snapshot(
        TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == (HANDLE)-1) return;

    memset(&pe32, 0, sizeof(pe32));
    pe32.dwSize = sizeof(PROCESSENTRY32);
    if (Process32First(hProcessSnap, &pe32))
    {
        do {
            memset(&me32, 0, sizeof(me32));
            me32.dwSize = sizeof(me32);
            File = strrchr(pe32.szExeFile, '//');
            File = File? File+1 : pe32.szExeFile;
            if (strcmpi(File,ExeName)==0) {
                EnumWindows((WNDENUMPROC)EnumWinProc,
                   pe32.th32ProcessID);
            }
        }
        while(Process32Next(hProcessSnap,&pe32));
    }
    CloseHandle(hProcessSnap);
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值