• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


一  使用全局原子

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中都有介绍。


 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
初学Delphi嵌入汇编[15]-需要保护的寄存器发布时间:2022-07-18
下一篇:
delphi进制转换发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap