如何监测一个程序是否在运行
请问如何检测一个程序是否在运行,如果被非法关闭以后自动重新启动程序
请问这如何实现,谢谢
问题点数: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



