我们如何确定程序已经在delphi中运行
我想从我的delphi应用程序运行一个程序(exe)。我可以做,但我想在运行之前检查程序是否已经在运行。有没有办法做到这一点。。提前感谢。以下函数检查进程是否正在运行。在uses子句中添加“TlHelp32”我们如何确定程序已经在delphi中运行,delphi,Delphi,我想从我的delphi应用程序运行一个程序(exe)。我可以做,但我想在运行之前检查程序是否已经在运行。有没有办法做到这一点。。提前感谢。以下函数检查进程是否正在运行。在uses子句中添加“TlHelp32” function ProcessRunning (sExeName: String) : Boolean; { -> sExeName : Name of the EXE without path. Does not have to be the full EXE name. }
function ProcessRunning (sExeName: String) : Boolean;
{ -> sExeName : Name of the EXE without path. Does not have to be the full EXE name. }
var
hSnapShot : THandle;
ProcessEntry32 : TProcessEntry32;
begin
Result := false;
hSnapShot := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
Win32Check (hSnapShot <> INVALID_HANDLE_VALUE);
sExeName := LowerCase (sExeName);
FillChar (ProcessEntry32, SizeOf (TProcessEntry32), #0);
ProcessEntry32.dwSize := SizeOf (TProcessEntry32);
if (Process32First (hSnapShot, ProcessEntry32)) then
repeat
if (Pos (sExeName,
LowerCase (ProcessEntry32.szExeFile)) = 1) then
begin
Result := true;
Break;
end; { if }
until (Process32Next (hSnapShot, ProcessEntry32) = false);
CloseHandle (hSnapShot);
end; { ProcessRunning }
函数ProcessRunning(sExeName:String):布尔值;
{->sExeName:没有路径的EXE名称。不必是完整的EXE名称。}
变量
hSnapShot:THandle;
ProcessEntry32:TProcessEntry32;
开始
结果:=假;
hSnapShot:=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
Win32Check(hSnapShot无效\u句柄\u值);
sExeName:=小写(sExeName);
FillChar(ProcessEntry32,SizeOf(tprocescentry32),#0);
ProcessEntry32.dwSize:=SizeOf(tprocesentry32);
如果(Process32First(hSnapShot,ProcessEntry32))那么
重复
如果(位置(六位),
小写(ProcessEntry32.szexFile))=1)然后
开始
结果:=真;
打破
终止{if}
直到(Process32Next(hSnapShot,ProcessEntry32)=false);
闭合手柄(hSnapShot);
终止{ProcessRunning}
请参见MSDN。该程序是您的吗?我有点困惑,为什么没有人投票以重复方式关闭?这是一个非常常见的问题…请随意链接到副本,@Jerry。这就是我想要的。谢谢。这似乎是你想要的,但我怀疑。使用此选项,您仍然可以根据时间安排多次启动流程。您真正需要的是使用互斥锁的解决方案。也就是说,这仍然是一个方便的函数。如果在启动进程之前调用此函数@Lieven,并且它返回true,则不会再次启动进程。时间和它有什么关系?您是否假设程序的目标是检测自身的前一个实例?没有迹象表明这就是目标。奥拉夫,你能解释一下Pos
通话的意义吗?是否存在Pos
可能对此功能产生错误答案的输入?文件路径是否重要?@RobKennedy-使用此解决方案,您仍然可以启动多个进程实例。看看这个问题,在我看来,这正是OP想要避免的。如果我的解释是错误的,OP,可以纠正我的错误。