Wie steht es aber mit Alt+F4 und
Strg+Alt+Entf?
Auch hierüber darf das Programm nicht
beendet werden können.
Das habe ich irgendwann einmal im Internet gefunden (obs funktioniert, weiss ich nicht - denke schon - kannst mir ja mal bescheid geben)
greets from MichL (Vienna)
… ja, ich weiß, eigentlich sollte der User bestimmen dürfen, was auf seinem Computer passiert und was nicht, aber verschiedentlich gibt es Gründe, davon abzuweichen - insbesondere dann, wenn von einer zentralen Stelle aus Sicherheits- oder auch funktionellen Gründen Beschränkungen vorgegeben werden können oder müssen.
Nehmen wir beispielsweise an, ein VB-Programm blockiert „in geeigneter Weise“ den Computer solange, bis von dieser zentralen Stelle die Freigabe erteilt wird. Dann ist es ein leichtes, dieses blockierende Programm mit dem Taskmanager zu terminieren und damit die Blockierung aufzuheben. Zwar kann man in der Form_QueryUnload-Prozedur bei UnloadMode = vbAppTaskManager (Taskmanager am Werk) das ganze im ersten Anlauf mit Cancel = True abblocken, doch spätestens der Klick auf den „Beenden“-Butten im Dialogfenster „Diese Anwendung reagiert nicht …“ macht unserem Programm unmißverständlich den Garaus.
Dagegen aber können wir uns schützen, indem wir uns gar nicht erst gegen das Schließen wehren (und damit die Aufmerksamkeit des Benutzers wecken), sondern vor dem Beenden des Programms durch den Taskmanager einfach eine neue Instanz unseres Programms starten:
Private Sub Form\_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim Pfad As String
If Not IDEMode() And UnloadMode = vbAppTaskManager Then '# vbAppTaskManager = 3
Pfad = App.Path
If Right$(Pfad, 1) "\" Then Pfad = Pfad & "\"
On Error Resume Next
Call Shell(Pfad & App.EXEName & ".exe") '# compilierte Anwendung neu starten
End If
End Sub
Private Function IDEMode() As Boolean
'Gibt zurück, ob die Anwendung in der Entwicklungsumgebung läuft
On Error Resume Next
Err.Clear
Debug.Print 1 / 0 ' Wird in einer EXE nicht ausgeführt
IDEMode = Err.Number 0
End Function
Und der (unbefugte) Benutzer wundert sich, weshalb trotz erfolgreicher Tätigkeit des Taskmanagers das Programm immer noch lebt (und weiterhin blockiert) …
Das ganze läßt sich natürlich noch verfeinern, aber hier soll es nur um den Grundgedanken als Anregung für weitere Überlegungen gehen. Gehen Sie mit dieser Funktionalität äußerst bedächtig um!