VB-Homepage Tipp 280

Programm nach Shutdown erneut starten (analog Explorer)

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.


Tipp-Download

Quelle :

Zurück zur Übersichtsseite