000
24.04.2004, 12:54 Uhr
Audron-AT-www
http://www.sXene.de Audron@sxene.de (Operator)
|
"Viele Wege führen nach Rom." Dieses Sprichwort trifft darauf 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:
Code: |
[windows] load=pfad+datei open=pfad+datei
|
Das Eintragen dieses Abschnittes erfolgt am einfachsten mit der API-Fuktion WriteProfileSection.
Visual Basic: |
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:
Visual Basic: |
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 Den Code dafür bitte in dem Thema "Autostart in Programmen 2!"
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.
Visual Basic: |
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 lautet dann so:
Visual Basic: |
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
|
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.
Visual Basic: |
' 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:
Visual Basic: |
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"
|
-- Mit freundlichen Grüßen Audron, audron@sxene.de
Dieser Post wurde am 26.09.2005 um 16:58 Uhr von Uwe editiert. |