怎么检测进程中某一程序是否运行?

天河落落 2012-04-06 01:17:52
怎么检测进程中某一程序是否运行?比如打开某一exe程序的时候,检查已经运行的话就不再打开了。
...全文
637 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aranjuze 2012-05-10
  • 打赏
  • 举报
回复
在你的 项目.cpp文件中加入如下代码

//====利用互斥,防止多个程序运行====
HANDLE hMutex=CreateMutex(NULL,TRUE,"WeightManager"); //进程中的名称
if(hMutex==NULL||GetLastError() == ERROR_ALREADY_EXISTS)
{
ShowMessage("稽核票管理软件已经运行.");
CloseHandle(hMutex);
return false;
}
cczlp 2012-05-08
  • 打赏
  • 举报
回复
如果列举的是其他进程, 没有绝对准确的方法, 进程运行后是可以改程序的名字的, 还可以直接从内存运行, 还可以套用其他进程外壳.
CandPointer 2012-05-07
  • 打赏
  • 举报
回复
命令。
tasklist /fi Imagename eq "some.exe"

进程单例?

创建 mutex 对象。

windows 核心编程,第三章?
我不懂电脑 2012-05-07
  • 打赏
  • 举报
回复
可以列举当前系统所有进程,BCB6自带了一个例子,手头没有BCB不记得名字了,自己找一下吧。
CCED136 2012-05-07
  • 打赏
  • 举报
回复
楼主到底是检测程序自身是否第一次运行, 还是检测其他程序是否在运行?

如果是检测程序自身是否运行, 就用具有名字的互斥或者事件都行, Mutex or Event , 这两个东西都简单, 看看 MSDN 就能搞定。

如果是检测其他程序是否运行, 那就只有列举当前系统所有进程的方式了, 列举的方法有快照(CreateToolhelp32Snapshot),PSAPI 等, 这个方法也很多。
ccrun.com 2012-05-07
  • 打赏
  • 举报
回复
光检测文件名是不严谨的,应该比对完全路径,因为同名的EXE很多。
欧阳帆54 2012-04-08
  • 打赏
  • 举报
回复
查看任务管理器有没有运行这个程序啊
对牛乱弹琴 2012-04-08
  • 打赏
  • 举报
回复
互斥吧,我见过这个用法,不过忘了怎么用了,很简单
mgsg 2012-04-06
  • 打赏
  • 举报
回复
String strFileName;
char szBuf[256];

bool bFound(false);

::PROCESSENTRY32 pe32 = {sizeof(pe32)};
HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == NULL)
return bFound;

try
{
bool bFlag = ::Process32First(hSnapShot, &pe32);
while (bFlag)
{
strFileName = String(pe32.szExeFile);
if (strFileName.Pos("\\") != 0)
strFileName = ExtractFileName(strFileName);
if (SameText(strFileName, strExeFile))
{
bFound = true;
break;
}
bFlag = ::Process32Next(hSnapShot, &pe32);
}
}
__finally
{
::CloseHandle(hSnapShot);
}

return bFound;

1,222

社区成员

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

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