Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ Visual Basic / VBA / VB.Net » VB6 - Autostart in Programmen!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ Visual Basic / VBA / VB.Net ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: