概述
多实例指同时有同一个应用程序的多个副本在一台电脑上同时运行,比如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
最后
以上就是拉长电话为你收集整理的delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例的全部内容,希望文章能够帮你解决delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复