Announcement

Collapse
No announcement yet.

Programmstartüberwachung ????

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

  • Programmstartüberwachung ????

    Hallo!
    Ich habe eine Anwendung geschrieben und möchte nun, dass diese nur einmal gestartet werden kann, bzw. eine Meldung kommt, dass das Programm bereits läuft.
    Wie kann ich dies bei einem Programmstart überwachen?

    MFG
    Christian Venzke

  • #2
    EInmal gehts so:

    //Wenn eine eigene Applikation nur einmal gestartet werden soll, muss dafür die
    //Projektdatei geeignet angepasst werden.

    PROGRAM Project1;

    USES
    Forms

    { Folgende Units müssen hinzugefügt werden }

    Windows,
    Dialogs,

    { Ende der hinzugefügten Uni'ts }

    Unit1 in 'Unit1.pas' { Form1 };

    {$R *.RES}

    VAR
    hMutex: THandle;
    begin
    hMutex := CreateMutex(nil, True, 'Mein Programm');

    {Der letzte Parameter ist systemweit gültig und sollte daher eindeutig sein,
    damit es zu keiner Kollision mit anderen Programmen kommt}

    IF GetLastError = ERROR_ALREADY_EXISTS THEN BEGIN ShowMessage('Das Programm kann nur einmal gestartet werden!'); Halt; { Programm wird beendet }
    END;

    {Appl ikation wird erstellt}

    Application.Initialize;Application.CreateForm(TFor m1, Form1);
    Application.Run;

    {Freigabe des erstellen Objekts}

    IF hMutex <> 0 THEN CloseHandle(hMutex);
    END

    Comment


    • #3
      oder auch so:

      unit instanz_laden;
      interface

      implementation

      uses
      windows, Dialogs, sysutils;

      var
      mHandle: THandle; // Mutexhandle

      Initialization
      mHandle := CreateMutex(nil,True,'XYZ');
      if GetLastError = ERROR_ALREADY_EXISTS then begin //Anwendung läuft bereits
      showMessage('Anwendung läuft bereits!!!!!');
      halt;
      end;
      finalization // ... und Schluß

      if mHandle <> 0 then CloseHandle(mHandle)

      end

      Comment


      • #4
        Vielen dank für die umgehende Antwort. Komme leider erst jetzt dazu sie zu lesen.
        MfG
        Christian Venzk

        Comment


        • #5
          Hi,

          wie wäre es mit der Freeware-Komponente TABFAutoRun? Gratis auf abfsoft.com

          AXM

          Comment


          • #6
            Komponenten dafuer sind nicht so gut. Sie kommen ja erst innerhalb des CreateForm-Aufrufs zum Zuge.<br>
            Der einfachste Trick ist es, mit FindWindow(Klassenname, nil) zu operieren. Freundlicherweise hat das Fenster der Hauptform als Windows-Fensterklassenname den Typnamen der Hauptform. Initial also "TForm1". Mit einem geschickt gewaehlten aussagekraeftigen Namen fuer die Form kommt man also ziemlich weit

            Comment

            Working...
            X