Sie kennen sicher das Verhalten des Explorers oder der
Systemsteuerung, wenn Sie diese Programme nicht beenden, sondern Ihren PC herunterfahren
und dadurch die Programme beendet werden, dann werden Sie sie bei der nächsten Anmeldung
erneut vorfinden.
Und nun die alles entscheidende Frage. Wie machen die das?
Ganz einfach, jedes VB-Programm hat zBsp. neben der Unload Methode
auch eine QueryUnload Methode und in dieser kann man ermitteln, wie das Programm beendet
wurde.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Wird das Programm beendet, wird abgefragt, wie es beendet wurde und falls es über einen
Shutdown des PCs beendet wurde, soll es also beim nächsten PC Start erneut gestartet
werden.
Dazu gibt es in der Registry einen Schlüssel.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
Der ist extra dafür da, bestimmte Programme automatisch zu starten, im Gegensatz zum
Schlüssel Run (den es hier ebenfalls gibt), aber nur einmal,
dann wird der Eintrag automatisch wieder entfernt.
Wenn also bekannt ist, daß das Programm über Shutdown beendet wurde, trägt sich das
Programm einfach in diesen Schlüssel ein und wird bei der nächsten Anmeldung automatisch
wieder gestartet. Für ein kleines Testprogramm
benötigen Sie eine neues Projekt mit einer Form.
Tragen Sie zunächst in den
Allgemein/Deklarationen Abschnitt folgendes ein.
Const REG_SZ = 1
Const HKEY_CURRENT_USER = &H80000001
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias
"RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As
Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As
Long
'REG_SZ = das Format des einzutragenden Wertes
(Zeichenkette)
'HKEY_CURRENT_USER = der benutzte Teilbaum der Registry
'RegCreateKey = Schlüssel anlegen
'RegSetValueEx = Wert festlegen
'RegCloseKey = Vorgang beenden
Außerdem benötigen wir noch die Angaben des Programms,
das bei einem Beenden des Programms durch Shutdown, nach dem Neustart erneut ausgeführt
werden soll. (im Normalfall also das eigene Programm)
Dies erfolgt unter
Form_QueryUnload .
Dim hKey As Long
Dim strRunCmd As String
'prüft, wie Anwendung beendet wird
If UnloadMode = vbAppWindows Then
strRunCmd = App.Path & "\" & App.EXEName & ".EXE"
Call RegCreateKey(HKEY_CURRENT_USER,
"Software\Microsoft\Windows\CurrentVersion\RunOnce", hKey)
Call RegSetValueEx(hKey, "MyApp", 0&, REG_SZ, ByVal strRunCmd,
Len(strRunCmd) + 1)
Call RegCloseKey(hKey)
Speichern Sie Ihr Testprojekt ab und kompilieren sich die
*.exe Datei.
Rufen Sie diese nun auf und starten Sie den neu.
Nach der nächsten Anmeldung steht Ihnen das Programm wieder zur Verfügung.
Die Gegenprobe.
Starten Sie das Programm, beenden Sie es normal, starten den PC neu und .... das Programm
darf nicht von alleine wieder starten. |