如何探测某个进程是否在运行?

castlooo 2007-12-17 05:53:44
如何探测某个进程是否在运行?
或者
如何探测一个进程在内存中?
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
li_fw 2008-01-12
  • 打赏
  • 举报
回复
妖哥不是人
他素个妖也
castlooo 2007-12-18
  • 打赏
  • 举报
回复
妖哥乃神人
castlooo 2007-12-18
  • 打赏
  • 举报
回复
瑞星自我保护提示:
进程D:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\PROJECT1.EXE触发了API类规则
ccrun.com 2007-12-17
  • 打赏
  • 举报
回复
枚举所有进程,判断指定的进程文件名是否存在于进程列表。
由于进程列表中可能同时存在多个同名的进程,所以最好是判断完整路径。

#include <tlhelp32.hpp>
bool CrnProcessExists(String strFileName)
{
String strExeFile;
bool bExists(false);
DWORD dwSize;

PROCESSENTRY32 pe32 = { sizeof(pe32) };
MODULEENTRY32 me32 = { sizeof(me32) };
HANDLE hSnapShot, hModuleSnap;

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapShot == NULL)
return false;

bool bFlag = Process32First(hSnapShot, &pe32);
while(bFlag)
{
strExeFile = String(pe32.szExeFile);
if(strExeFile.Pos("\\") == 0)
{
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, pe32.th32ProcessID);
if(hModuleSnap == INVALID_HANDLE_VALUE)
strExeFile = String(pe32.szExeFile);
else
{
if(Module32First(hModuleSnap, &me32))
strExeFile = String(me32.szExePath);
}
CloseHandle(hModuleSnap);
}

if(strExeFile.UpperCase() == strFileName.UpperCase())
{
bExists = true;
break;
}
bFlag = Process32Next(hSnapShot, &pe32);
}
CloseHandle(hSnapShot);

return bExists;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool bExists = CrnProcessExists("E:\\Tencent\\QQ2007\\QQ.exe");
ShowMessage(String("QQ进程") + (bExists? "找到了": "没找到"));
}

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧