RSS
StartseiteKnowledge LibraryTop 10Impressum

2.12 Wie verhindere ich das Beenden meines Programms?

VB4-VB6

Von:  [Home]

Damit ihr Programm auch noch geöffnet bleibt, wenn der Benutzer auf den Schließen-Button des Form klickt, müssen Sie das Beenden im QueryUnload- Ereignis des Form abbrechen:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If UnloadMode = vbFormControlMenu Then
    Cancel = True
  End If
End Sub

Anders geht es auch, indem sie einfach den Schließen-Button deaktivieren. Dies ist über einige Menü- API- Aufrufe realisierbar. Die benötigten Funktionen und Konstanten:

Private Declare Function GetSystemMenu Lib "user32" _
       (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" _
       (ByVal hMenu As Long, ByVal nPosition As Long, _
        ByVal wFlags As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" _
       (ByVal hwnd As Long) As Long

Private Const MF_BYCOMMAND = &H0&
Private Const MF_REMOVE = &H1000&

Private Const SC_CLOSE = &HF060

Aus diesen Funktionen wird eine Prozedur zusammengestellt, der lediglich das Form als Parameter übergeben werden muss. Über den optionalen Parameter Enabled lässt sich festlegen, ob das Schließen-Menü gesperrt (Standard => False) oder freigegeben ist (True):

Public Sub DisableClose(ByRef Form As Form, _
               Optional ByVal Enabled As Boolean)
  Dim hMenu  As Long
  
  If (Enabled) Then
    ' Systemmenü wiederherstellen:
    GetSystemMenu Form.hwnd, True
  Else
    ' Schließen-Menü sperren:
    hMenu = GetSystemMenu(Form.hwnd, False)

    RemoveMenu hMenu, SC_CLOSE, MF_BYCOMMAND
    RemoveMenu hMenu, &H0, MF_BYCOMMAND
  End If

  DrawMenuBar Form.hwnd
End Sub

Jetzt kann man einfach per DisableClose Me den Schließen-Button des aktuellen Form deaktivieren. Somit wird auch gleich der Eintrag "Schließen" im Systemmenü des Programms entfernt und das Programm lässt sich nicht mehr beenden. DisableClose Me, True setzt das Systemenü wieder zurück und schaltet den Schließen-Button wieder frei. Damit das Programm auch nicht per Alt + F4 beendet werden kann, muss weiterhin Cancel = True im QueryUnload- Ereignis des Form stehen, wie oben beschrieben.