C/C++知识点之C++小工具.关闭进程
小标 2018-08-27 来源 : 阅读 1166 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C++小工具.关闭进程,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C++小工具.关闭进程,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

1、根据 进程名 结束相应进程,exe名字:"__killProcessByName_console_vc6.exe"。

  项目保存于 baidu云(CodeSkill33)-->全部文件 -->Util_我的小工具_小软件 -->vs08_vc6 -->进程名_枚举进程_结束进程 --> __killProcessByName_console_vc6__?????.rar

2、代码:

复制代码
// __killProcessByName_console_vc6.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <TlHelp32.h>


bool MatchProcessName(char* _pcProcNameSnapshot, int argc, char* argv[], int* _piIdxOut)
{
    for (int i=1; i<argc; i++)
    {
        // strncmp 是大小写铭感的
        // 还有 strcmp
        if (! strnicmp(_pcProcNameSnapshot, argv[i], strlen(argv[i])))
        {
            *_piIdxOut = i;
            return true;
        }
    }
    return false;
}


int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        printf("请在程序的命令行参数中,输入需要kill的进程的名字\n");
        return 0;
    }
    printf("你想要结束的进程的名字为:\n");
    for (int i=1; i<argc; i++)
    {
        printf("\t%s\n", argv[i]);
    }
    printf("按任意键继续,或者 关闭本窗口退出程序\n");
    system("pause");


    int *piKills = new int[argc];
    memset(piKills, 0, argc * sizeof(int));
// ZC: 枚举进程
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 processEntry32 = {0};
    processEntry32.dwSize = sizeof(PROCESSENTRY32);

    BOOL bOk = Process32First(hSnapshot, &processEntry32);
    while (bOk)
    {
        //wprintf(L"%ws , %d\n", processEntry32.szExeFile, processEntry32.th32ProcessID);
        int iIdx = 0;
        if (MatchProcessName(processEntry32.szExeFile, argc, argv, &iIdx))
        {
            DWORD processID = processEntry32.th32ProcessID;
            //break;

                        // ZC: 强制结束进程
                        {
                            // strcmp   的宽字符版 wcscmp : 比较字符串(大小写 敏感)
                            // _stricmp 的宽字符版 _wcsicmp : 比较字符串(大小写 不敏感)
                            HANDLE hProcess =  OpenProcess(PROCESS_TERMINATE , false, processID);
                            if (hProcess == NULL)
                            {
                                printf("OpenProcess err : %d\n", ::GetLastError());
                                system("pause");
                            }
                            else
                            {
                                BOOL bResult = TerminateProcess(hProcess, 0);
                                if (! bResult)
                                {
                                    printf("TerminateProcess err : %d\n", ::GetLastError());
                                    system("pause");
                                }
                                else
                                {
                                    piKills[iIdx] ++;
                                }
                            }
                        }
        }
        bOk = Process32Next(hSnapshot, &processEntry32);
    }
    ::CloseHandle(hSnapshot);

    for (int j=1; j<argc; j++)
    {
        printf("\t%s 被kill掉了    \t==> %d个进程\n", argv[j], piKills[j]);
    }

    system("pause");
    return 0;
}    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程