Delphi 10.4利用CreateMutex函数创建互斥对象实例防止程序中多次执行该对象

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 1
function _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  Delphi控件源码下载网站

新建一个工程,窗体明明为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;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值