当前位置: 首页 > news >正文

[delphi]保证程序只运行一个实例

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


一  使用全局原子

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/huhu0013/archive/2010/09/01/1814943.html

相关文章:

  • vue常用的指令
  • 商业计划书范本
  • 聊聊kafka0.8的topic的partition以及topicCountMap
  • FloodFill(漫水填充)算法
  • 升级BIOS解决DELL R730XD虚拟机死机问题
  • C# 委托,事件和Lambda表达式
  • ES6学习笔记四 default、rest、Multi-line Strings
  • SharePoint 2010 Excel Service 入门——在网页上显示Excel内容
  • New Concept English Two 33 94
  • 100%高度全屏自适应
  • Django REST框架--关系和超链接api
  • sql语句的字段转成Date
  • [转]java按指定编码写入和读取文件内容的类
  • Android开发者应该深入学习的10个开源应用项目
  • centos7.3 docker升级
  • 【391天】每日项目总结系列128(2018.03.03)
  • go语言学习初探(一)
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • java正则表式的使用
  • Python爬虫--- 1.3 BS4库的解析器
  • springboot_database项目介绍
  • windows下如何用phpstorm同步测试服务器
  • 蓝海存储开关机注意事项总结
  • 前端_面试
  • 前端攻城师
  • 小试R空间处理新库sf
  • 移动端解决方案学习记录
  • 用element的upload组件实现多图片上传和压缩
  • 怎样选择前端框架
  • ​香农与信息论三大定律
  • # Maven错误Error executing Maven
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (windows2012共享文件夹和防火墙设置
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (学习日记)2024.01.09
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)插入排序
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net MVC + EF搭建学生管理系统
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net实现客户区延伸至至非客户区
  • .NET正则基础之——正则委托
  • /3GB和/USERVA开关
  • @EnableConfigurationProperties注解使用
  • @GlobalLock注解作用与原理解析
  • [20150629]简单的加密连接.txt
  • [ACTF2020 新生赛]Upload 1