Einzelnen Beitrag anzeigen

taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Fenster wiederherstellen mit SetForeGround

  Alt 24. Jun 2008, 10:33
Hmmm, seltsam.
Dann sollte es eigentlich funktionieren. Verwende ähnlichen (!) Code, allerdings in einer Unit ausgelagert - und das funktioniert bisher einwandfrei. Versuch's doch mal folgender Unit anstelle deines codes in der .dpr

Delphi-Quellcode:
unit rzM_OneInstanceOnly;

// Unit lediglich in das Projekt aufnehmen, danach werden mehrere Instanzen
// des Programmes unterbunden; bei erneutem Aufruf wird automatisch die
// erste Instanz aktiviert.

interface { ----------------------------------------------------------------- }

implementation { ------------------------------------------------------------ }

uses Forms,SysUtils,Windows;

var Mutex : THandle;
     MName : String;
     h : HWnd;

initialization { ------------------------------------------------------------ }

  MName:=ExtractFileName(ChangeFileExt(Application.ExeName,'_MTX'));
  Mutex:=CreateMutex(nil,true,pchar(MName)); // Mutex anlegen

  if GetLastError=ERROR_ALREADY_EXISTS then begin // Fehler, Pgm schon aktiv!

    h:=0; // vorhandene Instanz suchen
    repeat
      h:=Windows.FindWindowEx(0,h,PChar('TApplication'),PChar(Application.Title))
      until h<>Application.Handle;

    if h<>0 then begin // aktivieren
      Windows.ShowWindow(h,SW_Restore);
      Windows.SetForegroundWindow(h);
      end;

    Application.Terminate; // und diesen zweiten Aufruf beenden!
    end;

finalization { -------------------------------------------------------------- }

  ReleaseMutex(Mutex); // Mutex der ersten Instanz wieder freigeben!

end.
Ralph
  Mit Zitat antworten Zitat