博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[delphi]保证程序只运行一个实例
阅读量:4583 次
发布时间:2019-06-09

本文共 1102 字,大约阅读时间需要 3 分钟。

许多时候我们希望程序只有一个实例在运行,而不是多个实例同时运行。 其实完成这一功能有很多种方法,我把自己知道的几种方法简单介绍一下。

一  使用全局原子

program Project1;

uses

  windows,
  Forms,
  Dialogs,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

const

  myatom='我的全局原子方法';
begin
  if GlobalFindAtom(myatom)=0 then
  begin
    GlobalAddAtom(myatom);
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    GlobalDeleteAtom(GlobalFindAtom(myatom));
  end
  else
    showmessage('已经有一个实例在运行');
end.

 

二 使用互斥对象

var

  mymutex: THandle;
begin
  mymutex:=CreateMutex(nil,True,'我的互斥对象');
  if GetLastError<>ERROR_ALREADY_EXISTS then
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end
  else
    showmessage('已经有一个实例在运行');
end. 

  

三 使用FindWindow函数

var

  myhandle: THandle;
begin
  myhandle:=FindWindow(nil,'Form1');
  if myhandle=0 then
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end
  else
    showmessage('已经有一个实例在运行');
end.
        在上面介绍的几种方法中用到的 API函数GlobalFindAtom、GlobalAddAtom 、GlobalDeleteAtom、CreateMutex、GetLastError 、FindWindow 在msdn和delphi自带帮助的windows sdk中都有介绍。

转载于:https://www.cnblogs.com/ywangzi/archive/2012/08/22/2651300.html

你可能感兴趣的文章
数据库系统概论【基础篇】
查看>>
shell脚本中大于,大于等于,小于,小于等于、不等于的表示方法
查看>>
xcode 快捷键
查看>>
三十五.MySQL读写分离 MySQL多实例 、MySQL性能调优
查看>>
[LeetCode] 256. Paint House_Easy tag: Dynamic Programming
查看>>
Java基础——面向对象编程一:封装
查看>>
python ==> Django.view(登录,注册,个人页)
查看>>
在maven中没有的jar包如何处理?
查看>>
多线程与UI操作
查看>>
python 打印三角行,金字塔等
查看>>
CSS3 3D下拉折叠菜单
查看>>
判断DOM元素是否出现再浏览器窗口中
查看>>
vue小技巧--window变量
查看>>
pyqt重写键盘事件+获取信号发送对象
查看>>
Spark源码剖析 - SparkContext的初始化(六)_创建和启动DAGScheduler
查看>>
Python 使用Opencv实现图像特征检测与匹配
查看>>
50金句
查看>>
JavaScript------事件
查看>>
SQL锁表语句 (转摘)
查看>>
python--递归、二分查找算法
查看>>