C++小工具.关闭进程

Posted codehousez

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

3、

4、

5、

 

以上是关于C++小工具.关闭进程的主要内容,如果未能解决你的问题,请参考以下文章

程序员推荐:几个实用的 C++ 在线工具!

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段

如何在片段中使用按钮[关闭]

批处理脚本查找进程PID [关闭]

带有片段的操作栏的行为? [关闭]

VS中添加自定义代码片段——偷懒小技巧