FAQ 0013: Wie beende ich eine Anwendung richtig?
von Helge Rex
Frage
Wenn ich meine Anwendung beende, zeigt der Taskmanager sie immer noch in der Prozessliste an.
Was mache ich falsch?
Wie beende ich eine fremde Anwendung?
Eigene Anwendung beenden
Verbleibt die eigene Anwendung nach dem Beenden im Speicher, wird sie mit großer Wahrscheinlichkeit mit End beendet. Dies hat aber den großen Nachteil, daß Dialoge und Objekte nicht entladen, Datenbanken nicht geschlossen, Captures und Hooks nicht freigegeben werden.
Der Stop-Button in der VB-IDE hat übrigens die gleiche Wirkung wie End.
Eine Anwendung wird mit Unload korrekt beendet. Folgendes Beispiel verdeutlicht den Unterschied zwischen Unload und End.
Im Beispiel sind zwei weitere Möglichkeiten gezeigt: Die Rückfrage beim Benutzer und das Umgehen der Rückfrage bei verschiedenen Beendigungsarten.
Private Sub Command1_Click() ' Dialog schließen Unload Me End Sub Private Sub Command2_Click() ' Anwendung beenden End End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ' Der Taskmanager und Windows selbst rausfiltern Select Case UnloadMode Case vbAppTaskManager, vbAppWindows ' Immer beenden Cancel = False Case Else ' User fragen, ob wirklich beendet werden soll Cancel = (MsgBox("Wirklich beenden?", _ vbYesNo Or vbQuestion) = vbNo) End Select End Sub Private Sub Form_Unload(Cancel As Integer) Dim FRM As Form ' Alle Dialoge durchlaufen For Each FRM In VB.Forms ' Dialog entladen Unload FRM Set FRM = Nothing Next FRM End Sub
Fremde Anwendung beenden
Um eine fremde Anwendung zu beenden, sollte man sie zunächst bitten, sich selbst zu beenden:
Declare Function SendNotifyMessage Lib "user32" _ Alias "SendNotifyMessageA" ( _ ByVal hwnd As Long, _ ByVal msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Const WM_SYSCOMMAND As Long = &H112& Const SC_CLOSE As Long = &HF060&
Call SendNotifyMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0)
Wenn eine Anwendung darauf nicht reagiert (man sollte ihr dafür eine gewisse Zeitspanne einräumen, z. B. 20 Sekunden), kann man zu härteren Mitteln (wie z. B. Beliebigen Task ermitteln und terminieren [Tipp 0124]) greifen.
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.