一、原理
我们在设计软件时需要考虑的一个现实问题是如果用户打开了多个应用程序时应该怎样处理。一般标准的做法是弹出一个提示窗口告诉用户该应用程序已经处于运行中,然后阻止该实例的重复运行。具体实现方法要用到Windows的一个全局同步对象mutex。当第一次启动一个实例时我们使用CreateMutex函数创建一个mutex对象,然后每次启动一个实例时我们都使用OpenMutex函数检查mutex对象的值。若mutex为nil则表示还没有该实例在运行,否则表示已有实例在运行。
二、程序代码
program Project1;
uses Forms, windows, Dialogs, Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var mutex:THandle;
begin
try
mutex:=OpenMutex(0,false,'mutexname');
if mutex=0 then //没有该实例在运行
begin
mutex:=CreateMutex(nil,true,'mutexname');
//创建一个名为mutexname的mutex对象
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;//启动一个实例
end
else //若已有一个实例在运行
begin
ShowMessage('应用程序已在运行中!');
Application.Terminate;//阻止实例的重复运行
end;
finally
ReleaseMutex(mutex);//释放mutex对象
end;
end.
三、说明
以上代码应出现在项目文件的启动代码中。该程序用delphi6.0 在windows98上通过。
|