Contributor: MIKE SHANE


{
Here is some code I found a while back that will work in D1 or D2.  It
checks for previous instance and if the program is already running, it will
activate the previous instance including pulling up an iconic program.  I
have enclosed the source in an imaginary project (.dpr) file.

----- begin code for Check.dpr -----
}
program Check;

uses  WinTypes, WinProcs, SysUtils, Forms,
  MainForm in 'MAIN.PAS' {Form1},
  SecondForm in 'SECOND.PAS' {Form2},
  ThirdForm in 'THIRD.PAS' {Form3};

{$R *.RES}
{$IFDEF Win32}
  var Mutex: THandle;
{$ENDIF}

procedure CheckPrevInst;
  var PrevWnd: HWnd;
  begin
    {$IFDEF Win32}
      Mutex:=CreateMutex(NIL, False, 'SingleInstanceProgramMutex');
      if WaitForSingleObject(Mutex, 10000)=WAIT_TIMEOUT then Halt;
    {$ELSE}
      if HPrevInst=0 then Exit;
    {$ENDIF}
    PrevWnd:=FindWindow('TOneInstanceForm1', '1-Instance Program');
    if PrevWnd<>0 then PrevWnd:=GetWindow(PrevWnd, GW_OWNER);
    if PrevWnd<>0 then begin
      if IsIconic(PrevWnd) then ShowWindow(PrevWnd, SW_SHOWNORMAL)
      else  {$IFDEF Win32}
        SetForegroundWindow(PrevWnd);
      {$ELSE}
        BringWindowToTop(PrevWnd);
      {$ENDIF}
      Halt;
      end;
    end;

begin
  try
    CheckPrevInst;
    Application.CreateForm(TOneInstanceForm1, OneInstanceForm1);
  finally
    {$IFDEF Win32}
      OneInstanceForm1.HandleNeeded;
      ReleaseMutex(Mutex);
      CloseHandle(Mutex);
    {$ENDIF}
  end;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
  end.