admin 管理员组文章数量: 887021
这段代码实现了一个函数getProcess
,用于检查指定名称的进程是否存在。它通过遍历系统中的所有进程,对比输入的进程名(不区分大小写)与快照中的进程名,以判断是否存在指定进程。
-
getProcess
函数:该函数接受一个进程名(procressName
)作为输入,通过调用CreateToolhelp32Snapshot
函数创建一个进程相关的快照句柄。然后,使用Process32First
函数获取第一个进程信息。在遍历过程中,将进程名转换为小写,并与输入的进程名进行比较。如果存在与输入名称匹配的进程,则返回true
;否则继续遍历。最后,关闭快照句柄并返回false
,表示未找到匹配的进程。 -
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,¤tProcess); //获取第一个进程信息
while(bMore)
{
CharLowerBuff(currentProcess.szExeFile,MAX_PATH); //将进程名转换为小写
if (strcmp(currentProcess.szExeFile,pName)==0) //比较是否存在此进程
{
CloseHandle(hProcess); //清除hProcess句柄
return true;
}
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
}
CloseHandle(hProcess); //清除hProcess句柄
return false;
}
int main()
{
if (getProcess("qq.exe"))
{
printf("存在\n");
}
else
{
printf("不存在\n");
}
return 0;
}
版权声明:本文标题:CC++ 判断进程是否存在 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729011682h1306698.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论