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.
这个单元负责实现互斥应用程序的判定,当应用程序已经启动一个的时候再启动另一个就会弹出提示信息。如下:
若要详细查看请下载免费源代码:http://download.csdn.net/detail/sushengmiyan/4999436