zoukankan      html  css  js  c++  java
  • Delphi CreateMutex 防止程序多次运行

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

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

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

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

    【函数原声明】:

    function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle; 

    function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle;<br/>

    【参数说明】:

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

    bInitialOwner 是否初始化互斥体。

    lpName 互斥体对象的名称。

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

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

    【实现过程如下】:

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

  • 相关阅读:
    ****** 2019-2020-1 《数据结构与面向对象程序设计》第1周学习总结
    预备作业
    《数据结构与面向对象程序设计》第01周学习总结
    我太难了——00周作业
    作业二
    预备作业 作业一
    FIR滤波器设计
    第五章:相关分析
    通常来说分频电路用计数器来实现,奇数倍的话记得用上或门!
    HDLBits 刷题记录(5)
  • 原文地址:https://www.cnblogs.com/railgunman/p/6713621.html
Copyright © 2011-2022 走看看