delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例

来源:互联网 发布:背包问题的精确算法 编辑:程序博客网 时间:2024/05/03 16:28

  多实例指同时有同一个应用程序的多个副本在一台电脑上同时运行,比如windows自带的记事本,你可以打开任意数量的记事本程序同一个应用程序的多个副本可以相互独立地同时运行,是Win32操作系统提供的一个功能。但有时,我们可能希望用户启动应用程序后就不再启动它的别的副本。比如某种设备资源的控制程序,像调制解调器和并行端口。这种情况下,用程序代码防止同时出现多个程序的副本在运行是非常必要的。


写了这么一个单元:

{-----------------------------------------------------------------------------作者:sushengmiyan 2013.01.15备注:应用程序互斥判断,只允许运行一个应用程序实例来源:http://blog.csdn.net/sushengmiyan功能:应用程序互斥判定单元-----------------------------------------------------------------------------}unit AppUniqueInstance;interfaceuses Forms, Windows, SysUtils, APPConsts;type  TAppUniqueInstance = class  private    FMutHandle: THandle; //互斥的句柄类  public    constructor Create(AAppUniqueStr: string);    class function BuildMutex(AAppUniqueStr: string): Boolean;    class procedure FreeMutex;  end;implementation//单元中的变量在implementation中,只在本单元起作用var  AUniqueApp: TAppUniqueInstance;  {----------------------------------------------------------------------------\-作者:sushengmiyan 2013.01.15参数:AAppUniqueStr: string 标识应用程序唯一的字符串,比如GUID返回:Boolean功能:创建对象的类方法\-----------------------------------------------------------------------------}class function TAppUniqueInstance.BuildMutex(AAppUniqueStr: string): Boolean;begin  try    AUniqueApp := TAppUniqueInstance.Create(AAppUniqueStr);    Result := True;  except    FreeAndNil(AUniqueApp);    Result := False;    Application.MessageBox(PChar(sAppInstanceExist), PChar(sMessageBoxTips), MB_OK);  end;end;{----------------------------------------------------------------------------\-作者:sushengmiyan 2013.01.15参数:AAppUniqueStr: string返回:None功能:构造函数,如果已有实例运行,结束当前实例\-----------------------------------------------------------------------------}constructor TAppUniqueInstance.Create(AAppUniqueStr: string);begin  FMutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, PChar(AAppUniqueStr));  if FMutHandle <> 0 then  begin    //互斥对象已建立,说明已有实例存在,弹出提示框    raise Exception.Create(SAppInstanceExist)  end  else begin    //创建互斥对象    FMutHandle := CreateMutex(nil, False, PChar(AAppUniqueStr));  end;end;class procedure TAppUniqueInstance.FreeMutex;begin  FreeAndNil(AUniqueApp);end;end.

这个单元负责实现互斥应用程序的判定,当应用程序已经启动一个的时候再启动另一个就会弹出提示信息。如下:

若要详细查看请下载免费源代码:http://download.csdn.net/detail/sushengmiyan/4999436

原创粉丝点击