博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快照枚举进程/直接枚举进程
阅读量:5281 次
发布时间:2019-06-14

本文共 2789 字,大约阅读时间需要 9 分钟。

标 题: 快照枚举进程/直接枚举进程

作 者: 0xFFFFCCCC

时 间: 2013-04-12

链 接: 

 

采用进程快照枚举进程的方法查找指定名称进程

BOOL FindProcessByName(LPCTSTR szFileName, PROCESSENTRY32& pe){    // 采用进程快照枚举进程的方法查找指定名称进程    HANDLE hProcesses;    PROCESSENTRY32 lpe =    {        sizeof(PROCESSENTRY32)    };    CString strFileName(szFileName);    strFileName.MakeLower();    // 创建进程快照    hProcesses = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);    if (hProcesses == INVALID_HANDLE_VALUE)        return FALSE;    // 获取第一个进程实例    BOOL isExist = ::Process32First(hProcesses, &lpe);    BOOL isRunning = FALSE;    CString strName;    while (isExist)    {        strName = lpe.szExeFile;        strName.MakeLower();        if (-1 != strFileName.Find(strName))        {            isRunning = TRUE;            break;        }        // 遍历下一个进程实例        isExist = ::Process32Next(hProcesses, &lpe);    }    if (isRunning)    {        memcpy(&pe, &lpe, sizeof(PROCESSENTRY32));    }    CloseHandle(hProcesses);    return isRunning;}

 

直接枚举进程

BOOL FindProcessByName(LPCTSTR szFileName){    /************************************************************************/    // 采用直接枚举进程的方法查找指定名称进程    /* 名    称: FindProcessByName( LPCTSTR szFileName )    /* 功    能: 查询指定名称的进程是否有实例正在运行    /* 参  数: LPCTSTR szFileName, 可执行程序名称, 例如"c:\\notepad.exe"    /* 返 回 值: BOOL.TRUE, 有同名实例正在运行; FALSE, 没有同名实例正在运行.    /* 编 写 者: Xianren Li    /* 创建日期: 2007-08-17    /* 附加说明: 请注意进程的查找只是依据名称, 无法确保找到的进程调用的是预料    /*             中的可执行文件.    /* 修改记录:    /************************************************************************/    CString strFileName(szFileName);    strFileName.MakeLower();    DWORD aProcesses[1024], cbNeeded, cProcesses;    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))        return FALSE;    cProcesses = cbNeeded / sizeof(DWORD);    TCHAR szProcessName[MAX_PATH] = TEXT("
"); HANDLE hProcess; CString strName; BOOL isRunning = FALSE; for (unsigned int i = 0; i < cProcesses; i++) { hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]); if (NULL != hProcess) { HMODULE hMod; DWORD cbNeeded; if (::EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) { ::GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR)); strName = szProcessName; strName.MakeLower(); if (-1 != strFileName.Find(strName)) { isRunning = TRUE; CloseHandle(hProcess); break; } } CloseHandle(hProcess); } } return isRunning;}

 

很实用的代码来自

转载于:https://www.cnblogs.com/Y4ng/archive/2013/04/12/EnumProcessByName.html

你可能感兴趣的文章
BaseActivity--上门啦
查看>>
JS DOM对象
查看>>
python正则表达式
查看>>
OGR – Merging Multiple SHP files
查看>>
滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(10月17日~10月23日)...
查看>>
创业公司该不该被收购?(转)
查看>>
sqlserver 行转列、列转行[转]
查看>>
【IScroll深入学习】解决IScroll疑难杂症
查看>>
lua io
查看>>
如何让Button的Text垂直居中显示
查看>>
orcad candence 快捷键小结
查看>>
VBA精彩代码分享-2
查看>>
ajax异步发送数据到后台中文乱码的问题
查看>>
FFmpeg在JAVA中的使用以及Process.waitFor()引发的阻塞问题
查看>>
HTTP 学习笔记01
查看>>
C++基础知识梳理--C++的6个默认函数
查看>>
操作远程RabbitMQ
查看>>
HTML5 CSS3 专题 : 拖放 (Drag and Drop)
查看>>
Android学习笔记二
查看>>
重装和激活系统
查看>>