AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Mal wieder: Doppeltes starten einer Anwendung unterbinden
Thema durchsuchen
Ansicht
Themen-Optionen

Mal wieder: Doppeltes starten einer Anwendung unterbinden

Ein Thema von dust258 · begonnen am 11. Feb 2010 · letzter Beitrag vom 16. Feb 2010
 
dust258

Registriert seit: 18. Aug 2008
62 Beiträge
 
#1

Mal wieder: Doppeltes starten einer Anwendung unterbinden

  Alt 11. Feb 2010, 11:34
Mahlzeit,
ich versuche ein Programm per ShellExecute in ein anderes Programm einzubinden.
Dabei darf diese Anwendung immer nur 1x gestartet werden.
Wenn man versucht die Anwendung ein 2. mal zu starten soll die 1. Instanz in den Vordergrund geholt werden.

Ich habe also im Quelltext der aufzurufenden Anwendung folgenden Code hinterlegt. Der Aufruf und das Unterbinden von Mehrfachstarts funktionieren, aber die Anwendung wird nur beim 1. Versuch in den Vordergrund geholt...

Ich vermute das "BringWindowToTop" der falsche Befehl ist, aber "ShowWindow" bringt auch nicht den Erwünschten Erfolg (Es wird nur ein kleines Blaues Fenster über der Taskleiste angezeigt). Was anderes habe ich in den anderen Threads nicht gefunden... Sieht Jemand was ich falsch mache?

Delphi-Quellcode:
{$R *.res}
  const
    MutexName = 'ErweiterteListen';
  var
    hMutex: THandle;
  NextHandle: Hwnd;
  foundedHandle : Hwnd;
  NextTitle: array[0..260] of char;
  foundHandle : Boolean;
    begin
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TListStatSchnittForm, ListStatSchnittForm);
    foundHandle := false;
    hMutex := CreateMutex(NIL, True, MutexName);
    if (hMutex = 0) OR (GetLastError = ERROR_ALREADY_EXISTS) then
    begin
      //Ab hier wird die schon gestartete Anwendung gesucht
      CloseHandle(hMutex);
      begin
        NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
        while (NextHandle > 0) and (foundHandle = false) do
        begin
          GetWindowText(NextHandle, NextTitle, 255);
          if (Pos(ListStatSchnittForm.Caption, StrPas(NextTitle)) <> 0)
            and (NextHandle <> application.Handle)
            and (NextHandle <> ListStatSchnittForm.Handle) then
          begin
            foundedHandle := NextHandle;
            foundHandle := true;
          end
          else
            NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
        end;
      end;
      if foundHandle then
      begin
        BringWindowToTop(foundedHandle);
        //ShowWindow(foundedHandle, SW_SHOW);
        halt;
      end
    end;
  Application.Run;
end.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz