Rubrik: System/Windows · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 10.06.01 |
Anwendung autom. starten Vier verschiedene Möglichkeit eine Anwendung automatisch beim Windows-Start zu starten. | ||
Autor: Dieter Otter | Bewertung: | Views: 72.723 |
www.tools4vb.de | System: 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+dateiDas 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)