首页 > 其他 > 详细

只允许一个实例运行

时间:2020-03-16 17:16:27      阅读:66      评论:0      收藏:0      [点我收藏+]

用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.

只允许一个实例运行

原文:https://www.cnblogs.com/huiy/p/12504528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!