VB 5/6-Tipp 0028: Anwendung nach Neustart automatisch starten
von ActiveVB
Beschreibung
Wenn Sie Windows herunterfahren und vorab der Windows- oder Internet-Explorer geöffnet und nicht geschlossen war, dann laden sich diese Programme nach dem Neustart automatisch. Dies funktioniert über einen entsprechend dafür vorgesehenen Eintrag in der Registry. Dieses Prinzip lässt sich auch mit VB-Anwendungen bewerkstelligen. Der folgende Source beinhaltet ein ausführliches Beispiel zu diesem Thema.
Dieser Tipp funktioniert entweder nur in kompilierter Form oder benötigt eine DLL/OCX-Datei. Diese Binärdateien sind dem Tipp hinzugefügt worden, um seinen Funktionsumfang darstellen zu können. Vor dem Upload wurden sie auf Viren geprüft.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: RegCloseKey, RegCreateKeyA (RegCreateKey), RegDeleteValueA (RegDeleteValue), RegOpenKeyExA (RegOpenKeyEx), RegSetValueExA (RegSetValueEx) | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Rahmensteuerelement "Frame1" ' Steuerelement: Optionsfeld-Steuerelement "Option1" (Index von 0 bis 3) auf Frame1 ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Beschriftungsfeld "Label1" 'Achtung : Das Programm funktioniert nicht in der Ent- ' wicklungsumgebung. Um es auszuprobieren be- ' nutzen Sie die beigefügte .exe Datei oder ' kompilieren diesen Source Option Explicit Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal _ lpSubKey As String, ByVal ulOptions As Long, ByVal _ samDesired As Long, phkResult As Long) As Long 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 Long, ByVal cbData _ As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" _ Alias "RegDeleteValueA" (ByVal hKey As Long, _ ByVal lpValueName As String) As Long Const HKEY_CLASSES_ROOT As Long = &H80000000 Const HKEY_CURRENT_USER As Long = &H80000001 Const HKEY_LOCAL_MACHINE As Long = &H80000002 Const HKEY_USERS As Long = &H80000003 Const HKEY_PERFORMANCE_DATA As Long = &H80000004 Const HKEY_CURRENT_CONFIG As Long = &H80000005 Const HKEY_DYN_DATA As Long = &H80000006 Const KEY_QUERY_VALUE As Long = &H1& Const KEY_SET_VALUE As Long = &H2& Const KEY_CREATE_SUB_KEY As Long = &H4& Const KEY_ENUMERATE_SUB_KEYS As Long = &H8& Const KEY_NOTIFY As Long = &H10& Const KEY_CREATE_LINK As Long = &H20& Const KEY_READ As Long = KEY_QUERY_VALUE Or _ KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Const KEY_ALL_ACCESS As Long = KEY_QUERY_VALUE Or _ KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or _ KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _ KEY_CREATE_LINK Const ERROR_SUCCESS As Long = 0& Const REG_NONE As Long = 0& Const REG_SZ As Long = 1& Const REG_EXPAND_SZ As Long = 2& Const REG_BINARY As Long = 3& Const REG_DWORD As Long = 4& Const REG_DWORD_LITTLE_ENDIAN As Long = 4& Const REG_DWORD_BIG_ENDIAN As Long = 5& Const REG_LINK As Long = 6& Const REG_MULTI_SZ As Long = 7& Const REG_OPTION_NON_VOLATILE As Long = &H0& Private Sub Command1_Click() Unload Me End Sub Private Sub Command2_Click() ' Beenden, keine Einträge in die Registry, ' um das Programm beim nächsten Reboot wieder zu ' starten! ' Löschen der Registrysettings! Dim mvalue Dim Result As Long Dim hKey As Long Dim Root As Long Dim Key As String 'Root = HKEY_LOCAL_MACHINE 'Konstante... Root = HKEY_CURRENT_USER 'auch möglich Key = "Software\Microsoft\Windows\CurrentVersion\RunOnce" ' unser Beispieleintrag lautete "MyApp" mvalue = "MyApp" Result = RegOpenKeyEx(Root, Key, 0, KEY_ALL_ACCESS, hKey) If Result = ERROR_SUCCESS Then Result = RegDeleteValue(hKey, mvalue) Result = RegCloseKey(hKey) End If Unload Me End Sub Private Sub Form_Load() Command1.Caption = "Beenden über Code" Command2.Caption = "Ende + DeleteKey!" Option1(0).Caption = "Bei Neustart laden, wenn über Systemmenü beendet wurde" Option1(1).Caption = "Bei Neustart laden, wenn durch Code beendet [Button unten]" Option1(2).Caption = "Bei Neustart laden, wenn Windows Sitzung beendet wurde" Option1(3).Caption = "Bei Neustart laden, wenn durch den Taskmanager beendet" End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) '### Bedeutung des Werteinhalts der Variablen 'UnlodeMode' ' UnloadMode = vbFormControlMenu [0] Schließen aus dem Systemmenü ' UnloadMode = vbFormCode [1] Unload über Code aufgerufen. ' UnloadMode = vbAppWindows [2] Windows wird beendet ' UnloadMode = vbAppTaskManager [3] Beenden durch Task-Manager ' UnloadMode = vbFormMDIForm [4] MDI-Formular wird geschlossen Dim Path As String, Slash As String Dim Key As Long Dim X As Integer '### Abfragen welche Bedingung ein Laden nach dem Neustart erlaubt For X = 0 To 3 If Option1(X).Value = True Then Exit For Next X If UnloadMode = X Then If Right$(App.Path, 1) <> "\" Then Slash = "\" Path = App.Path & Slash & App.EXEName & ".EXE" Call RegCreateKey(HKEY_CURRENT_USER, _ "Software\Microsoft\Windows\CurrentVersion\RunOnce", Key) Call RegSetValueEx(Key, "MyApp", 0&, REG_SZ, VarPtr(Path), _ Len(Path) + 1) Call RegCloseKey(Key) End If End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 8 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Max am 27.03.2005 um 16:12
Des is ja ganz schön, aber ich brauch ein script das sich selbst nach dem hochfahren startet, egal wie beendet wurde!
(für win xp) kennt da jemand was??
Kommentar von Fabius am 15.12.2002 um 18:08
Ich finde keinen key run services.
Gibt's den vielleicht nur unter WinME?
Kommentar von IVHP am 07.08.2002 um 19:39
der key: run services statt run. alle dort stehenden programme wird vor dem einloggen gestartet.
Kommentar von Mucke, Klaus am 01.06.2002 um 21:43
Toll, leider geht das erst nach dem Einloggen, Jemand eine Idee wie PC-Anywhere das macht ?
Kommentar von vbcoder am 13.01.2002 um 13:49
Bei ME:
Software\Microsoft\Windows\CurrentVersion\Run
Kommentar von mad am 01.12.2001 um 19:22
bei WinME funzt es nicht. (bei WinXP tuts)
gibt es für ME eine lösung, die mindestens genauso elegant ist?
Kommentar von Peter Iwanowitsch am 22.08.2001 um 13:23
Ehm ich glaube die Überschrift ist nicht so treffend, ansonsten danke :)
Fehler in der Überschrift:
nicht Neutsart sondern NEUSTART :)
Ansonten weiter so !
Kommentar von Tobias am 21.04.2001 um 17:11
Kann es sein das es bei Win ME nicht geht?