Announcement

Collapse
No announcement yet.

eigene anwendung beenden, wenn bereits da...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • eigene anwendung beenden, wenn bereits da...

    hallo,

    wie kann ich eine anwendung beenden, wenn diese zum zweiten mal gestartet werden soll. findet das programm also eine laufende instanz soll diese instanz beendet werden. wie kann ich sowas machen?

    mfg
    ake

  • #2
    Hallo,

    man könnte in der Projektdatei (*.dpr) folgendes machen:

    <pre>
    <b>var</b>
    hTargetWnd : HWND;

    <b>begin</b>
    hTargetWnd := FindWindowEx(0, 0, <b>nil</b>, c_FormTitel_Ex);
    <b>if</b> hTargetWnd &lt;&gt; 0
    <b>then</b> PostMessage(hTargetWnd, PM_ActivateApp, 111, 111)
    <b>else</b> <b>begin</b>
    Application.Initialize;
    Application.CreateForm(TFormMain, FormMain);
    Application.Run; <b>end</b>;
    <b>end</b>.
    </pre>
    Über die Win32-API-Funktion <b>FindWindowEx</b> sucht das Programm beim Start nach der Beschriftung des Hauptfensters. Wenn dieses gefunden wird, erhält die bereits laufende Instanz eine private Botschaft, damit sich dieses bereits bestehende Fenster in den Vordergrund drängt. Nur dann, wenn FindWindowEx kein Fenster findet, wird die Anwendung normal ausgeführt

    Comment


    • #3
      hallo,

      danke für die antwort. ich möchte aber, wenn die anwendung gestartet wird sie aber bereits zuvor bereits gestartet wurde, das die zuerst gestartete instanz geschlossen wird, also was in der art:
      <pre>
      if hTargetWnd <> 0 then
      DestroyWindows(hTargetWnd);
      </pre>

      mfg
      ak

      Comment


      • #4
        Hallo,

        in diesem Fall muss über PostMessage nicht die private Botschaft zugestellt werden, sondern WM_QUIT:

        <pre>

        PostMessage(hTargetWnd, WM_QUIT, 0, 0);

        </pre>

        Immer dann, wenn die Message Loop (Botschaftsbehandlungsmethode) der Anwendung die Botschaft WM_QUIT in der Warteschlange vorfindet, wird die Schleife verlassen und die Anwendung beendet (wenn diese Message Loop für den primären Thread der Anwendung zuständig ist)

        Comment

        Working...
        X