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; 

  • 相关阅读:
    [OrangePi] Installation on SD Card
    网线直连笔记本玩树莓派
    vim多行缩进的方法
    对linux的根目录执行强制递归移除
    windows下快速启动 nginx 和 php-cgi 的两个批处理
    windows下nginx和php环境的配置
    c语言对文件操作完成后尽量手动关闭
    [记录]使用openGL显示点云的一个程序
    linux中使用软链接时出现 too many levels of symbolic links
    使用 nano 的时候提示找不到 libncursesw.so.5 这个共享库
  • 原文地址:https://www.cnblogs.com/railgunman/p/6713621.html
Copyright © 2011-2022 走看看