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
- delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例
- Delphi防止同时出现多个应用程序实例之改进
- Delphi防止同时出现多个应用程序实例
- Delphi防止同时出现多个应用程序实例--CreateMutex
- Delphi防止同时出现多个应用程序实例--CreateMutex
- Delphi防止同时出现多个应用程序实例--CreateMutex
- Delphi防止同时出现多个应用程序实例--CreateMutex
- Delphi Thread CreateMutex : 防止同时出现多个应用程序实例(Server)
- "防止同时出现多个应用程序实例"之改进
- 防止同时出现多个应用程序实例之改进
- c++中怎么防止一个应用程序的多个实例同时运行
- Delphi中如何防止运行一个应用程序的多个实例
- 防止应用程序同时启动多个
- 避免同时运行同一个应用程序的多个实例
- 多线程同时启动多个应用程序
- 学习Delphi刚满月第一个delphi应用程序
- 避免在一台机器上同时运行同一应用程序的多个实例。
- 设置应用程序(如VC6.0)同时打开多个实例
- Android 中的Context (Application Context 和Activity Context)
- 三维图形学
- 关于内存对齐的小总结
- QtCreator: ptrace operation not permitted错误解决方法
- LeetCode Binary Tree Maximum Path Sum
- delphi中应用程序互斥学习演练---防止同时出现多个应用程序实例
- JSTL核心标签库
- 多功能按键设计——利用一个I/O口,接一个按键,实现3功能操作:单击 + 双击 + 长按
- markdown笔记(二)
- Quartz Develop Practice One
- vc MSChart的使用
- 不改变链表结构,反向打印链表
- AI中的几种搜索算法---基因算法
- 操作一个设备