Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0540: Programm zusammen mit Windows starten

 von 

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:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RegCloseKey, RegDeleteValueA (RegDeleteValue), RegOpenKeyA (RegOpenKey), RegQueryValueExA (RegQueryValueEx), RegSetValueExA (RegSetValueEx)

Download:

Download des Beispielprojektes [4,44 KB]

'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-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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 ;-)