2.12 Wie verhindere ich das Beenden meines Programms?
VB4-VB6
Von: Tobias Schikora [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.