Delphi 10.4利用CreateMutex函数创建互斥对象实例防止程序中多次执行该对象
发布日期:2021-05-04 20:44:06 浏览次数:16 分类:技术文章

本文共 1410 字,大约阅读时间需要 4 分钟。

windows是个多用户多任务的操作系统,支持多个程序同时运行,如果你的程序不想让用户同时运行一个以上,

那应该怎样做呢? 本文将介绍避免用户同时运行多个程序的例子。

需要用到的函数CreateMutex ,CreateMutex 函数是windows中一个并不常用的函数,

该函数对象在系统中只能存在一个实例且是互斥体,所以利用这种特性就很简单的实现了我们的要求。

unit Winapi.Windows中的函数原声明:

// NT 4.0 bug workaround - NT 4.0 doesn't test bInitialOwner for zero/nonzero, it tests for 1function _CreateMutex(lpMutexAttributes: PSecurityAttributes;  bInitialOwner: Integer; lpName: LPCWSTR): THandle; stdcall; external kernel32 name 'CreateMutexW';function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: LPCWSTR): THandle;begin  Result := _CreateMutex(lpMutexAttributes, Integer(Boolean(bInitialOwner)), lpName);end;

 

【参数说明】:

lpMutexAttributes 是一个SECURITY_ATTRIBUTES 结构类型的指针,可以设置为NULL。

bInitialOwner 是否初始化互斥体。

lpName 互斥体对象的名称。

函数返回一个互斥体句柄。

当程序运行时创建对象,如果对象已经存在就表明程序已经被运行了。。

【实现过程如下】:欢迎加入Delphi开发局QQ群:32422310  

新建一个工程,窗体明明为Form1.

添加一个Button按钮命名为Button1.

双击按钮添加代码

procedure TForm1.Button1Click(Sender: TObject); var   hw : HWND;   gt : Integer; begin   Application.Initialize;   Application.Title := 'runmyfile';   hw := CreateMutex(nil,False,'runmyfile'); {创建互斥体对象}   gt := GetLastError;   if gt <> Error_ALREADY_EXISTS then     {如果没有发现互斥体对象}   begin     Application.CreateForm(TForm1,Form1); {创建窗体}     Application.Run;   end   else   begin     Application.MessageBox('程序已经运行','提示',MB_OK);     Application.Terminate;     ReleaseMutex(hw);{释放互斥体}  end;      end;

 

上一篇:Python九齿耙(Ninerake)数据采集大数据深度学习智能分析爬虫软件的正则表达式规则简介
下一篇:2020delphi还有人用吗?delphi过时了吗?为什么还有那么多程序员坚持继续选择DELPHI作为软件开发工具

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月19日 05时17分46秒