vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: System/Windows · Sonstiges   |   VB-Versionen: VB4, VB5, VB610.06.01
Anwendung autom. starten

Vier verschiedene Möglichkeit eine Anwendung automatisch beim Windows-Start zu starten.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  72.672 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

"Viele Wege führen nach Rom." Dieses Sprichwort trifft auf unseren heutigen Tipp besonders zu. Oftmals wird gefragt: "Wie kann ich erreichen, daß meine Anwendung automatisch beim Windows-Start gestartet wird?" Hierfür gibt es verschiedene Wege und Möglichkeiten. Nachfolgend möchten wir Ihnen vier verschiedene Varianten zeigen - alle haben Ihre Vor- und Nachteile. Suchen Sie sich am besten die für Sie am besten geeignete Möglichkeit aus.

1. Eintragung in die win.ini - Datei
Bei dieser Variante handelt es sich um einen Zweizeiler. Einfach nachfolgenden Abschnitt in die win.ini eintragen:

[windows]
load=pfad+datei
open=pfad+datei
Das Eintragen dieses Abschnittes erfolgt am einfachsten mit der API-Fuktion WriteProfileSection.

Private Declare Function WriteProfileSection Lib "kernel32" _
  Alias "WriteProfileSectionA" ( _
  ByVal lpAppName As String, _
  ByVal lpString As String) As Long
 
' Programm in win.ini eintragen
Public Sub SaveAppToWin_ini(ByVal AppFile As String)
  WriteProfileSection "windows", "load=" & AppFile & _
    vbCrLf & "open=" & AppFile
End Sub

Der Aufruf erfolgt dann so:

SaveAppToWin_ini App.Path & "\" & App.EXEName & ".exe"
Der Nachteil an dieser sehr kurzen Variante ist, daß ein evtl. in der win.ini bereits eingetragenes Programm überschrieben wird, da immer nur ein einziger Eintrag erfolgen kann.


2. Eintragung in die Registry
Die zweite Variante trägt Ihre Anwendung in die Windows-Registrier-Datenbank ein. In der Registry gibt es hierfür einen speziellen Zweig:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices

Alle in diesem Bereich eingetragenen Anwendungen und Dienste werden beim Windows-Start automatisch geladen und ausgeführt. Den Source-Code hierfür haben finden Sie in einem früheren Tipp:
 Anwendung beim Windowsstart öffnen


3. Verknüpfung im AutoStart-Ordner
Die dritte Variante erzeugt eine direkte Verknüpfung im AutoStart-Ordner (Startmenü - Programme - Autostart). Hierzu stellt die STKIT432.DLL (im Lieferumfang von VB4 enthalten) alle benötigten Funktionen zur Verfügung.

Private Declare Function OSfCreateShellLink Lib "STKIT432.DLL" _
  Alias "fCreateShellLink" ( _
  ByVal lpstrFolderName As String, _
  ByVal lpstrLinkName As String, _
  ByVal lpstrLinkPath As String, _
  ByVal lpstrLinkArguments As String) As Long
 
Private Declare Function OSfRemoveShellLink Lib "STKIT432.DLL" _
  Alias "fRemoveShellLink" ( _
  ByVal lpstrFolderName As String, _
  ByVal lpstrLinkName As String) As Long
 
Private Declare Function OSfCreateShellGroup Lib "STKIT432.DLL" _
  Alias "fCreateShellFolder" ( _
  ByVal lpstrDirName As String) As Long
 
' Verknüpfung in Ordner "AutoStart" erstellen
Public Sub SaveLinkToAutoStart(ByVal AppFile As String, _
  ByVal AppTitel As String, ByVal AppParam As String)
  Dim lResult As Long
 
  On Local Error Resume Next
  OSfCreateShellLink "Autostart", AppTitel, AppFile, _
    AppParam
  If Err <> 0 Then
    ' Autostart-Ordner existiert nicht
    ' also zunächst erstellen...
    OSfCreateShellGroup "Autostart"
 
    ' ... und erneut versuchen
    OSfCreateShellLink "Autostart", AppTitel, AppFile, _
      AppParam
  End If
End Sub

Der Aufruf erfolgt dann so:

Dim AppFile As String
Dim AppTitel As String
Dim AppParam As String
 
AppFile = App.Path & "\" & App.EXEName & ".exe"
AppTitel = "Meine Anwendung"
 
' optional Parameterübergabe für den Aufruf
AppParam = ""
 
SaveLinkToAutoStart AppFile, AppTitel, AppParam

Wenn Sie nicht im Besitz von VB4 sind, können Sie sich hier die STKIT432.DLL downloaden:
 STKIT432.DLL (24 KB)


4. Verwenden der SHELLLNK.TLB
Die vierte Variante verwendet die TypeLibrary SHELLLNK.TLB. Mit dem Einbinden dieser Datei lassen sich beliebige Verknüpfungen (in beliebigen Ordner/Verzeichnissen) erstellen - also auch im AutoStart-Ordner. Als Parameter wird allerdings der exakte Verzeichnisnamen des Ordners erwartet. In aller Regel heisst der Verzeichnisname des AutoStart-Ordners "c:\windows\desktop\startmenü\programme\autostart". Jetzt darf man aber nicht davon ausgehen, daß das immer so ist - denn auf dem Zielrechner könnte ja Windows 2000 installiert sein - und da gibt es den Ordner "Desktop" schon mal nicht im Windows-Verzeichnis
Also zunächst eine Routine, die den vollständigen Verzeichnisnamen des Autostart-Ordners ermittel.

' zunächst die benötigten API-Deklarationen
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" ( _
  ByVal pidl As Long, _
  ByVal pszPath As String) As Long
 
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" ( _
  ByVal hwndOwner As Long, _
  ByVal nFolder As Long, _
  pidl As ITEMIDLIST) As Long
 
Private Const CSIDL_STARTUP = &H7
 
Private Type SHITEMID
  cb As Long
  abID As Byte
End Type
 
Private Type ITEMIDLIST
  mkid As SHITEMID
End Type
 
Private Function GetSpecialfolder(CSIDL As Long) As String
  Dim r As Long
  Dim IDL As ITEMIDLIST
  Dim Path As String
 
  If SHGetSpecialFolderLocation(100, CSIDL, IDL) = 0 Then
    Path = Space$(512)
    r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal Path)
    GetSpecialfolder = Left$(Path, InStr(Path, Chr$(0)) - 1)
  End If
End Function
 
' Verzeichnisnamen für AutoStart-Ordner ermitteln
Public Function GetAutoStartFolder() As String
  Dim sPath As String
 
  sPath = GetSpecialfolder(CSIDL_STARTUP)
  If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
  GetAutoStartFolder = sPath
End Function

Mit diesen Informationen lässt sich nun die Verknüpfung im AutoStart-Ordner mit Hilfe der SHELLLNK.TLB folgendermaßen realisieren:

Public Function CreateLink(Datei As String, _
  LinkName As String)
  Dim cShellLink As ShellLinkA
  Dim cPersistFile As IPersistFile
 
  Set cShellLink = New ShellLinkA
  Set cPersistFile = cShellLink
 
  cShellLink.SetPath Datei
  cPersistFile.Save StrConv(LinkName, vbUnicode), 0
 
  Set cPersistFile = Nothing
  Set cShellLink = Nothing
End Function
 
' Verknüpfung Ihrer Anwendung im
' AutoStart-Ordner speichern
CreateLink App.Path & "\" & App.EXEName, _
  GetAutoStartFolder() & "MeineAnwendung" & ".lnk"

Wenn Sie diese Varianten verwenden (oder ausprobieren möchten) müssen Sie Ihrem Projekt den entsprechenden Verweis hinzufügen (Menü Projek - Verweise). Für alle, die die SHELLLNK.TLB nicht finden oder nicht haben, hier der Download-Link:
 SHELLLNK.TLB (6 KB)
 

Dieser Tipp wurde bereits 72.672 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel