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

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

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


写了这么一个单元:

{-----------------------------------------
作者:sushengmiyan 2013.01.15
备注:应用程序互斥判断,只允许运行一个应用程序实例
来源:http://blog.csdn.net/sushengmiyan
功能:应用程序互斥判定单元
-----------------------------------------}

unit AppUniqueInstance;

interface

uses
 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.

这个单元负责实现互斥应用程序的判定,当应用程序已经启动一个的时候再启动另一个就会弹出提示信息。如下:delphi中应用程序互斥学习演示-防止同时出现多个应用程序实例

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