admin 管理员组

文章数量: 887021

这段代码实现了一个函数getProcess,用于检查指定名称的进程是否存在。它通过遍历系统中的所有进程,对比输入的进程名(不区分大小写)与快照中的进程名,以判断是否存在指定进程。

  1. getProcess函数:该函数接受一个进程名(procressName)作为输入,通过调用CreateToolhelp32Snapshot函数创建一个进程相关的快照句柄。然后,使用Process32First函数获取第一个进程信息。在遍历过程中,将进程名转换为小写,并与输入的进程名进行比较。如果存在与输入名称匹配的进程,则返回true;否则继续遍历。最后,关闭快照句柄并返回false,表示未找到匹配的进程。

  2. main函数:在main函数中,调用getProcess函数并传入进程名"qq.exe"进行检查。如果存在该进程,输出"存在";否则输出"不存在"。

需要注意的是,当前进程需要具备足够的权限才能打开其他进程的快照。在实际运行时,确保以管理员权限运行或具备足够的权限以避免访问限制。

#include <windows.h>
#include <tlhelp32.h>    //进程快照函数头文件
#include <stdio.h>

bool getProcess(const char *procressName)                //此函数进程名不区分大小写
{
    char pName[MAX_PATH];                                //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
    strcpy(pName,procressName);                            //拷贝数组
    CharLowerBuff(pName,MAX_PATH);                        //将名称转换为小写
    PROCESSENTRY32 currentProcess;                        //存放快照进程信息的一个结构体
    currentProcess.dwSize = sizeof(currentProcess);        //在使用这个结构之前,先设置它的大小
    HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照

    if (hProcess == INVALID_HANDLE_VALUE)
    {
        printf("CreateToolhelp32Snapshot()调用失败!\n");
        return false;
    }

    bool bMore=Process32First(hProcess,&currentProcess);        //获取第一个进程信息
    while(bMore)
    {
        CharLowerBuff(currentProcess.szExeFile,MAX_PATH);        //将进程名转换为小写
        if (strcmp(currentProcess.szExeFile,pName)==0)            //比较是否存在此进程
        {
            CloseHandle(hProcess);                                //清除hProcess句柄
            return true;
        }
        bMore=Process32Next(hProcess,&currentProcess);            //遍历下一个
    }

    CloseHandle(hProcess);    //清除hProcess句柄
    return false;
}

int main()
{
    
    if (getProcess("qq.exe"))
    {
        printf("存在\n");
    }
    else
    {
        printf("不存在\n");
    }
    return 0;
}

本文标签: 是否存在 进程