| 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 LongDim strRunCmd As String
 'prüft, wie Anwendung beendet wirdIf 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.
 |