• delphi:只允许一个实例运行


    用win32 API的CreateMutex来实现。

    HANDLE CreateMutex(
        LPSECURITY_ATTRIBUTES  lpMutexAttributes,   // 指向安全属性的指针
        BOOL  bInitialOwner,   // 初始化互斥对象的所有者
        LPCTSTR  lpName   // 指向互斥对象名的指针
      );

    例如:

    var
      hMutex: HWND;   //主窗口句柄
    
      Ret: integer;   // 最后的错误代码,用来检测是否是一个实例运行
    
    begin
    
    //进程互斥,只允许一个实例运行
    
    //主要根据第三个参数建立互斥指针,如果发现这个值已经存在,说明程序已经在运行,所以这个值必须具有唯一性
    
    // 存在,则返回已有窗口句柄
    
    hMutex := CREATEMUTEX(nil, FALSE, 'XXXXXX系统4B2LLLLMMDAAAAA-5DC34AF-12Z7-5TGB7U-9IJN0OK2445');
     Ret := GETLASTERROR;   //获得错误号,如果是多个实例,将会产生  183 这个值的错误号
    if Ret = ERROR_ALREADY_EXISTS then        //ERROR_ALREADY_EXISTS 表示进程已经存在
    begin
       setActiveWindow(hMutex);      //激活已有主窗口
      Application.Terminate;        // 当前程序终止
      exit;   //跳出当前代码块
    end;
    
    
    
    
    end.
  • 相关阅读:
    确定机器上装有哪些.net framework版本
    C#中的私有构造函数
    突破vs2008 RTM90天使用限制(转)
    圣诞晚会串词(转)
    C#中ref和out
    登缙云山随笔
    质量百分百
    自然界五种长有人脸像的怪异生物
    C# 静态构造函数
    NET环境下基于Ajax的MVC方案
  • 原文地址:https://www.cnblogs.com/huiy/p/12504528.html
Copyright © 2020-2023  润新知