您好,如果判断一个程序已经在运行 ? 谢谢(20分)

  • 主题发起人 主题发起人 pcgod
  • 开始时间 开始时间
用findwindow的api函数。
 
用互斥
var
hmutex: hwnd;
begin
Application.title := '程序名';
hMutex := createMutex(nil,false,'程序名');
ret := GetLastError;
if Ret= ERROR_ALREADY_EXISTS then
begin
ShowMessage('已运行')
end;
end;

 
給你一個,

//防止多個相同的exe程序同時運行,EPS為可執行文件的名稱
if (GlobalFindAtom('EPS') = 0) then //GlobalFindAtom('EPS')搜索系統數據庫看程序是否在運行
//if (GlobalFindAtom(PChar(Application.ExeName)) = 0) then
begin
wRunCount := GlobalAddAtom('EPS');//把exe文件名添加到系統數據庫
end else //如果該程序已經運行,顯示信息并{退出程序
begin
strMsg := '本台機器上已經有一套"'+Self.Caption+'"在運行,不能再運行本系統';
Application.MessageBox(PChar(strMsg),PChar(CMSG_TITLE),MB_OK+MB_ICONINFORMATION);
// Halt;
Application.Terminate;
end; //end if
 

只把大概处理原理写了,一些C的伪代码。可以发现任何指定的程序是否运行了。
ok = Process32First(Han, &Process);
while(ok)
{
if(Process.szExeFile=YourFileName)
{
//该程序运行了。
}
ok = Process32First(Han, &Process);
}
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
char szExeFile[MAX_PATH];
} PROCESSENTRY32;
 
太麻烦了!用
Hd := FindWindow(nil, '程序名');
if hd=0 then
begin
howmessage('您的程序没有运行');
end;
 
LQ的方法最好
 
多人接受答案了。
 
后退
顶部