{
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.