VB 5/6-Tipp 0540: Programm zusammen mit Windows starten
von Uwe Jorgel
Beschreibung
Dieser Tipp zeigt, wie man sein Programm so in die Registrierung einträgt, dass es wahlweise einmal, immer oder gar nicht mit Windows zusammen gestartet wird. Als kleiner Bonus zeigt das Programm, wie man einstellt, das Windows automatisch einen Benutzer mit Name und Passwort anmeldet.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: RegCloseKey, RegDeleteValueA (RegDeleteValue), RegOpenKeyA (RegOpenKey), RegQueryValueExA (RegQueryValueEx), 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 AutoRun.vbp ------------- '---- Anfang Formular "frmAutoRun" alias frmAutoRun.frm ---- ' Steuerelement: Schaltfläche "cmdAbort" ' Steuerelement: Schaltfläche "cmdSave" ' Steuerelement: Rahmensteuerelement "fraAutoLogin" ' Steuerelement: Textfeld "txtUsername" auf fraAutoLogin ' Steuerelement: Textfeld "txtPassword" auf fraAutoLogin ' Steuerelement: Kontrollkästchen-Steuerelement "chkAutoLogin" auf fraAutoLogin ' Steuerelement: Linien-Steuerelement "lnSeperator" auf fraAutoLogin ' Steuerelement: Beschriftungsfeld "lblWarning" auf fraAutoLogin ' Steuerelement: Beschriftungsfeld "lblUsername" auf fraAutoLogin ' Steuerelement: Beschriftungsfeld "lblPassword" auf fraAutoLogin ' Steuerelement: Rahmensteuerelement "fraOptions" ' Steuerelement: Optionsfeld-Steuerelement "optNoRun" auf fraOptions ' Steuerelement: Optionsfeld-Steuerelement "optRunOnce" auf fraOptions ' Steuerelement: Optionsfeld-Steuerelement "optRun" auf fraOptions Option Explicit 'Deklaration Konstanten Private Const csAppName As String = "AutoRun" Private Sub chkAutoLogin_Click() 'Deklaration Variablen Dim bMode As Boolean bMode = chkAutoLogin.Value 'Eingabe-Felder de-/aktivieren lblUsername.Enabled = bMode txtUsername.Enabled = bMode lblPassword.Enabled = bMode txtPassword.Enabled = bMode lblWarning.Enabled = bMode 'Auto-Login de-/aktiviert? If bMode Then 'Trennlinie durch Simulation der Farb-Anpassung aktivieren lnSeperator.BorderColor = &H80000008 'Eingabe-Cursor automatisch auf Kennwort-Feld setzen txtPassword.SetFocus Else 'Trennlinie durch Simulation der Farb-Anpassung deaktivieren lnSeperator.BorderColor = &H8000000B End If End Sub Private Sub cmdAbort_Click() 'Programm beenden Unload Me End Sub Private Sub cmdSave_Click() 'Auto-Login de-/aktiviert? If chkAutoLogin.Value Then 'Benutzername und Kennwort eingegeben? If Len(txtUsername.Text) = 0 Or _ Len(txtPassword.Text) = 0 Then 'Fehlermeldung, falls Benutzername und Kennwort 'nicht eingegeben wurden MsgBox "Die automatische Windows-Anmeldung " & _ "darf keinen leeren Bentutzername und Kennwort " & _ "enthalten.", vbCritical, "Auto-Login:" Exit Sub Else 'Auto-Login in die Registry eintragen SetAutoLogin txtUsername.Text, txtPassword.Text End If Else 'Auto-Login aus der Registry entfernen DeleteAutoLogin End If 'Erste Option gewählt? (Programm immer starten) If optRun.Value Then 'Programm aus Key "RunOnce" entfernen und in Key '"Run" eintragen DeleteAutoRunOnce csAppName SetAutoRun csAppName, App.Path & "\" & App.EXEName End If 'Zweite Option gewählt? (Programm einmalig starten) If optRunOnce.Value Then 'Programm aus Key "Run" entfernen und in Key "RunOnce" 'eintragen DeleteAutoRun csAppName SetAutoRunOnce csAppName, App.Path & "\" & App.EXEName End If 'Dritte Option gewählt? (Programm nie starten) If optNoRun.Value Then 'Programm aus Key "Run" und "RunOnce" entfernen DeleteAutoRun csAppName DeleteAutoRunOnce csAppName End If End Sub Private Sub Form_Load() 'Standard-Benutzername aus der Registry lesen txtUsername.Text = GetDefaultUsername 'Programm aus Key "RunOnce" entfernen, falls es nur 'einmalig starten soll DeleteAutoRunOnce csAppName End Sub '----- Ende Formular "frmAutoRun" alias frmAutoRun.frm ----- '----- Anfang Modul "modRegistry" alias modRegistry.bas ----- Option Explicit 'Deklaration API-Konstanten Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const REG_SZ = 1 'Deklaration API-Funktionen 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 Private Declare Function RegOpenKey Lib "advapi32.dll" _ Alias "RegOpenKeyA" (ByVal hKey As Long, _ ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" (ByVal hKey As Long, _ ByVal lpValueName As String, ByVal lpReserved As Long, _ lpType As Long, lpData As Any, lpcbData 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 Public Function DeleteAutoLogin() As Boolean 'Deklaration Variablen Dim hKey As Long 'Werte für "AutoLogin" aus der Registry entfernen RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows " & _ "nt\currentversion\winlogon", hKey RegDeleteValue hKey, "AutoLogin" RegDeleteValue hKey, "DefaultPassword" RegCloseKey hKey End Function Public Function DeleteAutoRun(sValueName As String) As Boolean 'Deklaration Variablen Dim hKey As Long 'Werte für "Run" aus der Registry entfernen RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows\" & _ "currentversion\run", hKey RegDeleteValue hKey, sValueName RegCloseKey hKey End Function Public Function DeleteAutoRunOnce(sValueName As String) As Boolean 'Deklaration Variablen Dim hKey As Long 'Werte für "RunOnce" aus der Registry entfernen RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows\" & _ "currentversion\runonce", hKey RegDeleteValue hKey, sValueName RegCloseKey hKey End Function Public Function GetDefaultUsername() As String 'Deklaration Variablen Dim hKey As Long Dim lBuffer As Long Dim lRes As Long Dim sUsername As String RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows " & _ "nt\currentversion\winlogon", hKey lRes = RegQueryValueEx(hKey, "DefaultUserName", 0, REG_SZ, _ ByVal 0, lBuffer) If lRes = 0 Then sUsername = String(lBuffer, Chr(0)) lRes = RegQueryValueEx(hKey, "DefaultUsername", 0, 0, _ ByVal sUsername, lBuffer) If lRes = 0 Then GetDefaultUsername = Replace(sUsername, Chr(0), "") End If End If End Function Public Function SetAutoLogin(sUsername As String, _ sPassword As String) As Boolean 'Deklaration Variablen Dim hKey As Long 'Werte für "AutoLogin" in die Registry eintragen RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows " & _ "nt\currentversion\winlogon", hKey RegSetValueEx hKey, "AutoLogin", 0, REG_SZ, ByVal "1", Len("1") RegSetValueEx hKey, "DefaultUserName", 0, REG_SZ, _ ByVal sUsername, Len(sUsername) RegSetValueEx hKey, "DefaultPassword", 0, REG_SZ, _ ByVal sPassword, Len(sPassword) RegCloseKey hKey End Function Public Function SetAutoRun(sValueName As String, _ sValue As String) As Boolean 'Deklaration Variablen Dim hKey As Long 'Werte für "Run" in die Registry eintragen RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows\" & _ "currentversion\run", hKey RegSetValueEx hKey, sValueName, 0, REG_SZ, ByVal sValue, _ Len(sValue) RegCloseKey hKey End Function Public Function SetAutoRunOnce(sValueName As String, sValue As String) As Boolean 'Deklaration Variablen Dim hKey As Long 'Werte für "RunOnce" in die Registry eintragen RegOpenKey HKEY_LOCAL_MACHINE, "software\microsoft\windows\" & _ "currentversion\runonce", hKey RegSetValueEx hKey, sValueName, 0, REG_SZ, ByVal sValue, _ Len(sValue) RegCloseKey hKey End Function '------ Ende Modul "modRegistry" alias modRegistry.bas ------ '-------------- Ende Projektdatei AutoRun.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 5 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 Will Klaus am 16.06.2008 um 11:14
Habe beim Autologuin Win XP Probleme:
habe alle Angaben korrekt eingegeben und trotzdem gibt er beim hochfahren die Fehlermeldung Groß und Kleinschreibung beachten. Hat jemand eine Ahnung was ich noch probieren könnte.
Danke
mfg
K. Will
Kommentar von werner am 31.08.2004 um 12:24
RegSetValueEx hKey, "AutoAdminLogon", 0, REG_SZ, _
ByVal "1", 1
Mit diesem Zusatz hat´s geklappert.XP-SP2
Kommentar von Achim am 23.03.2004 um 17:34
Schön, dass es bei dir funktioniert. Bei mir tut es das nicht. Habe VB 6.0 + WinXP Professional Edition.
Der Schlüssel wird erzeugt, mit korrektem namen, aber der wert wird falsch gesetzt. Da steht dann nur sowas in der richtung: "<ñ"
mfg
Achim
Kommentar von am 23.03.2004 um 17:34
Schön, dass es bei dir funktioniert. Bei mir tut es das nicht. Habe VB 6.0 + WinXP Professional Edition.
Der Schlüssel wird erzeugt, mit korrektem namen, aber der wert wird falsch gesetzt. Da steht dann nur sowas in der richtung: "<ñ"
mfg
Achim
Kommentar von Uwe Jorgel am 18.12.2002 um 12:12
Funktionalität unter WinXP mit VB6!
Also ich weiss ja net, welche Scherzkekse behaupten, dass es unter WinXP mit VB6 nicht gehen würde, aber als ich den Tipp geschrieben habe, habe ich genaus das Betriebssystem und die VB-Version 6.0 verwendet ;-)