[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    Following on from " "Sean Gates" <sgates@goofy.iafrica.com>", place the
    following at the start of your name.dpr:

    begin
      if HPrevInst <> 0 then begin
        ActivatePreviousInstance;
        Exit;
      end;
      .
      .
      .

    and include the following unit:

    -------------- cut here -------------------- }
    unit PrevInst;

    interface

    uses WinProcs, WinTypes, SysUtils;

    type
      PHWnd = ^HWnd;

    function EnumFunc(Wnd : HWnd; TargetWindow : PHWnd): Bool; export;
    procedure ActivatePreviousInstance;

    implementation

    function EnumFunc(Wnd : HWnd; TargetWindow : PHWnd): Bool;
    var
      ClassName : array [0..30] of char;
    begin
      Result := True;
      if GetWindowWord(Wnd,GWW_HINSTANCE) = HPrevInst then begin
        GetClassName(Wnd,ClassName,30);
        if StrIComp(ClassName,'TApplication') = 0 then begin
          TargetWindow^ := Wnd;
          Result := False;
        end;
      end;
    end;

    procedure ActivatePreviousInstance;
    var
      PrevInstWnd : HWnd;
    begin
      PrevInstWnd := 0;
      EnumWindows(@EnumFunc,Longint(@PrevInstWnd));
      if PrevInstWnd <> 0 then
        if IsIconic(PrevInstWnd) then
          ShowWindow(PrevInstWnd,SW_RESTORE)
        else
          BringWindowToTop(PrevInstWnd);
    end;

    end.

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]