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

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

在Delphi中建立一个应用程序,然后单击菜单“Project”,单击“View Source”,这样就在代码编辑器中打开了工程文件://


一  使用全局原子

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

转自:http://www.cnblogs.com/huhu0013/archive/2010/09/01/1814943.html

posted @ 2013-12-16 12:47  stma  阅读(581)  评论(0)    收藏  举报