CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

如何监测一个程序是否在运行

楼主fjye(老姜)2003-08-03 12:41:30 在 C++ Builder / 基础类 提问

请问如何检测一个程序是否在运行,如果被非法关闭以后自动重新启动程序  
   
  请问这如何实现,谢谢 问题点数:50、回复次数:7Top

1 楼sun_wyz(欲将心事付瑶琴 知音少 弦断有谁听)回复于 2003-08-03 13:18:22 得分 0

可以建立2个线程,互相监视,谁关闭了,另外的线程就重起它。  
  你可以搜索一下以前的帖子。Top

2 楼fjye(老姜)回复于 2003-08-03 13:30:38 得分 0

我是想在不同程序之间,而不是线程之间Top

3 楼Yea(一步步地清醒)回复于 2003-08-03 13:38:17 得分 35

bool   IsProgramRun(LPCSTR   ExeName)  
  {  
          LPCSTR   File;  
          HANDLE   hProcessSnap;  
          PROCESSENTRY32   pe32;  
   
          if   (!ExeName   ||   !ExeName[0])  
                  return   false;  
          File   =   strrchr(ExeName,   '\\');  
          if   (File!=0)   ExeName   =   File+1;  
          hProcessSnap   =   CreateToolhelp32Snapshot(  
                  TH32CS_SNAPPROCESS,   0);  
          if   (hProcessSnap   ==   (HANDLE)-1)    
                  return   false;  
   
          memset(&pe32,   0,   sizeof(pe32));  
          pe32.dwSize   =   sizeof(PROCESSENTRY32);  
          if   (Process32First(hProcessSnap,   &pe32))  
          {  
                  do   {  
                          File   =   strrchr(pe32.szExeFile,   '\\');  
                          File   =   File?   File+1   :   pe32.szExeFile;  
                          if   (strcmpi(File,ExeName)==0)  
                                  return   true;  
                        }  
                  while(Process32Next(hProcessSnap,&pe32));  
          }  
          CloseHandle(hProcessSnap);  
          return   false;  
  }  
   
  bool   EnumPrograms(TListBox*   ListBox)  
  {  
          char   buf[65];  
          HANDLE   hProcessSnap;  
          PROCESSENTRY32   pe32;  
   
          ListBox->Items->Clear();  
          hProcessSnap   =   CreateToolhelp32Snapshot(  
                  TH32CS_SNAPPROCESS,   0);  
          if   (hProcessSnap   ==   (HANDLE)-1)  
                  return   false;  
   
          memset(&pe32,   0,   sizeof(pe32));  
          pe32.dwSize   =   sizeof(PROCESSENTRY32);  
          if   (Process32First(hProcessSnap,   &pe32))  
          {  
                  do   {  
                          sprintf(buf,   "%s     pid=%08lx",   pe32  
                                  .szExeFile,   pe32.th32ProcessID);  
                          ListBox->Items->Add(buf);  
                  }  
                  while(Process32Next(hProcessSnap,&pe32));  
          }  
          CloseHandle(hProcessSnap);     return   true;  
  }  
   
   
   
   
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
  if   (IsProgramRun("你要监视的程序.exe"))  
          ShowMessage("你要监视的程序已经在运行");  
          else   ShowMessage("good");Top

4 楼warton(创业群13734424 http://www.anywhy.cn)回复于 2003-08-03 14:18:30 得分 10

HWND   H;  
  H=Findwindow("your   exe   file   class","exe   tile");  
  if(!H)  
  WinExec("xxx.exe",SW_SHOW);Top

5 楼warton(创业群13734424 http://www.anywhy.cn)回复于 2003-08-03 14:26:23 得分 0

你可以用   Yea的IsProgramRun()直接判断exe文件是事运行Top

6 楼gemhuang(宝贝)回复于 2003-08-03 16:10:00 得分 0

Yea   是什么东东Top

7 楼zldjp(zldjp)回复于 2003-08-03 16:17:08 得分 5

FindWindow,最简单的一个API函数  
  用Spy++   补获一下类名就可以了Top

相关问题

  • 如何监测A.exe是否在运行!
  • 请问怎么监测程序的运行速度?
  • 监测程序或系统运行时间的方法,有吗?
  • 如何在程序中监测是否连入interNET?
  • 如何监测一个程序是否存在!!加分100!
  • 检查另一程序是否运行...
  • 如何在unix下,自己写一个程序,去监测另外一个程序的运行状况?
  • 怎样在程序运行前判断是否有已运行的实例?
  • 怎么知道一个程序是否在运行?
  • 是否D版惹的祸?程序安装后无法运行!

关键词

  • 监视
  • hprocesssnap
  • pe
  • exename
  • isprogramrun
  • 程序
  • 运行
  • processentry
  • szexefile
  • listbox

得分解答快速导航

  • 帖主:fjye
  • Yea
  • warton
  • zldjp

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo