我是靠谱客的博主 拉长电话,最近开发中收集的这篇文章主要介绍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

最后

以上就是拉长电话为你收集整理的delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例的全部内容,希望文章能够帮你解决delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部