exe nur einmal öffnen

-cta-

Mitglied
hallo zusammen...

ich möchte, dass meine exe nur einmal geöffnet werden kann, bzw. nur eine instanz vorhanden ist....falls sie ein 2tes mal gesatrtet wird, soll eine meldung kommen und danach die gerade gestartete geschlossen werden...


ich kriege aber eine endlos schleife....

kann mal bitte jemand drüber schaun


Code:
Private Sub Form_Load()
    
    Dim i As Integer
    Dim intFileNummer As String
    Dim strDateiName As String
    Dim strInput As String
    
    'Prüfen, ob Anwendung bereits gestartet ist
    If App.PrevInstance Then
        'Ja! Jetzt Fenster-Handle ermitteln
        Dim RetVal As Long
        RetVal = FindWindow(vbNullString, _
          "ABC-Manager")
        If RetVal <> 0 Then
            ' Anwendung gefunden - jetzt aktivieren
            Call SetForegroundWindow(RetVal)
            MsgBox "Der ABC-Manager ist bereits geöffnet!"
            
        End If
        ' zweite Instanz beenden
        Unload ABCManagerFRMneu01
        
    End If

End Sub
 
Ich bin mir nicht ganz sicher, ob das soweit ohne Probleme möglich ist, im Load-Event des Hauptformulars das Unload-Event aufzurufen. Probier es stattdessen einfach mal mit einem einfachen End (zum Beenden der ganzen Anwendung).
 
Hallo,

ich habe ein Beispiel anbei gelegt. Schau Dir dies bitte an. Vielleicht hilft es Dir weiter.

ANI
 

Anhänge

  • erneutes starten des eigenen pro
    9,5 KB · Aufrufe: 111
Original geschrieben von Dario Linsky
Ich bin mir nicht ganz sicher, ob das soweit ohne Probleme möglich ist, im Load-Event des Hauptformulars das Unload-Event aufzurufen. Probier es stattdessen einfach mal mit einem einfachen End (zum Beenden der ganzen Anwendung).

das funktioniert auch nicht...da komme ich in eine endlosschleife der msgbox....
 
Ich hab den ursprünglichen Code von -cta- getestet und mit ein paar Anpassungen läuft der bei mir wunderbar:
Code:
'Deklaration der API ausgelassen
Private Sub form_load() ' von Form1
    If App.PrevInstance Then
        Dim RetVal As Long
        RetVal = FindWindow(vbNullString, _
          "Form2")
        If RetVal <> 0 Then
            MsgBox "Die Anwendung ist bereits geöffnet!"
            Call SetForegroundWindow(RetVal)
        End If
        Unload Me
    Else
        Form2.Show
    End If
End Sub
Wenn das Programm schon läuft wird die gerade gestartete (neue) Instanz wieder mit Unload Me beendet.
Ich habe zwei Formulare verwendet, da FindWindow(...,"Form1") NICHT die schon laufende Instanz findet, sondern das "neue" Form1 der zweiten Instanz, welches gerade geladen wird. Dieses in den Vordergrund zu holen macht aber wenig Sinn ;)
Das Funktioniert wenn Form1 z.B. ein Startbildschirm ist und Form2 das Hauptfenster.
Sollte die Anwendung nur ein Fenster haben muss man obigen Code in eine Sub Main in ein Modul schreiben und das als Startobjekt unter Projekt => Eigenschaften angeben.
Nachdem das Modul auf andere Instanzen getestet hat kann es das Hauptfenster laden.
 
habs so geregelt:

Code:
Private Sub Form_Initialize()
  If App.PrevInstance Then
    MsgBox "Achtung!" & vbCrf & _
      "Der ABC-Manager kann nur einmal geöffnet werden!"
    ' Anwendung beenden
    End
  End If
End Sub
 
Zurück