
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;
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月19日 05时17分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
解方程
2019-03-03
中缀转后缀 逆波兰表达式求值
2019-03-03
练习赛 位运算 思维 思维
2019-03-03
Netty 粘包 拆包 | 史上最全解读
2019-03-03
ByteBuf(秒懂)- 图解Netty系列
2019-03-03
protobuf + maven 爬坑记
2019-03-03
考了400分?不好意思,可能连这些“变态”学校的复试线都没够着!
2019-03-03
【调剂】其它计算机/软件调剂信息 20.5.20
2019-03-03
【调剂】211北京邮电大学2020年计算机学院硕士研究生招生缺额信息
2019-03-03
【招生目录和招生简章】浙江大学 华北电力大学 河南工业大学 福建师范大学...
2019-03-03
北京理工大学软件学院今年取消招生!
2019-03-03
这些考研阅卷潜规则你知道几个?
2019-03-03
【考研英语】考研英语小作文万能模板(致歉信)
2019-03-03
【数据结构与算法】队列
2019-03-03
中国最委屈的十所大学
2019-03-03
【20考研】英语第一轮复习要做的二三事
2019-03-03
【研究生】PyTorch 1.0稳定版正式发布,并向开发者提供免费AI课程
2019-03-03
平均分392分!某985计算机专硕复试线暴涨!
2019-03-03
为何二战考生成功率远远大于应届?
2019-03-03