vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB601.08.12
Beliebige Verknüpung auslesen und aktualisieren

Dieser Code zeigt, wie sich eine beliebige Verknüpfung (LNK-Datei) auslesen, verändern und neu speichern lässt.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  2.128 
http://www.tools4vb.de/System:  WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Wie man eine Verknüpfung (.LNK Datei) neu erstellen kann, haben wir Ihnen hier im vb@rchiv bereits mehrfach gezeigt. Heute geht es jedoch in erster Linie darum, die Eigenschaften einer bereits vorhandenen LNK-Datei zu ermitteln, um bspw. das Ziel zu aktualisieren und die Änderungen dann wieder zu speichern.

Oftmals handelt es sich bei Verknüpfungen um Einträge im Windows-Start Menü (bspw. Programme). Wie man diese speziellen Ordner ermitteln kann, können Sie hier nachlesen:
 Systemordner ermitteln II

In unserem Tipp zum Auslesen der Verknüpfungs-Eigenschaften benötigen wir die Konstante sfidDRIVERS aus obigen Tipp.

1. Verknüpungs-Eigenschaften auslesen

Dim oShell As Object
Dim oLink As Object
Dim sFile As String
 
' Pfad+Dateiname der Verknüpfung (lnk-Datei)
sFile = GetSpecialFolder(sfidCOMMON_PROGRAMS) & "\MyApp\MyApp.exe"
 
If Len(Dir$(sFile, vbNormal)) > 0 Then
  ' Verweis auf Shell32 via Late-Binding
  Set oShell = CreateObject("shell.application").NameSpace(sfidDRIVERS)
 
  ' Verknüpfungs-Eigenschaften lesen
  Set oLink = oShell.ParseName(sFile).GetLink
 
  ' Eigenschaften auslesen
  Debug.Print oLink.Path                ' Ziel
  Debug.Print oLink.WorkingDirectory    ' Ausführen in
  Debug.Print oLink.Arguments           ' Aufrufparameter
  Debug.Print oLink.Description         ' Beschreibung
 
  ' Objekte zerstören
  Set oLink = Nothing
  Set oShell = Nothing
End If

Um jetzt bspw. das Ziel einer Verknüpfung zu ändern brauchen wir einfach nur die Path-Eigenschaft des Link-Objekts zu ändern und anschließend die Save-Methode aufzurufen.

Am besten wir verpacken das in eine universelle Funktion.

' Verknüpung aktualisieren / speichern
Private Function LinkUpdate(ByVal sLinkFile As String, _
  Optional ByVal sTargetFile As Variant, _
  Optional ByVal sArguments As Variant, _
  Optional ByVal sWorkingDir As Variant, _
  Optional ByVal sDescription As Variant) As Boolean
 
  Dim oShell As Object
  Dim oLink As Object
  Dim F As Integer
 
  ' Feherlbehandlung
  On Error GoTo ErrHandler
 
  ' Verweis auf Shell32 via Late-Binding
  Set oShell = CreateObject("shell.application").NameSpace(sfidDRIVERS)
 
  ' Falls die Verknüpfung noch nicht existiert
  ' jetzte erstellen, damit die Eigenschaften gespeichert werden können
  If Len(Dir$(sLinkFile, vbNormal)) = 0 Then
    F = FreeFile
    Open sLinkFile For Output As #F
    Close #F
  End If
 
  ' Verknüpfungs-Eigenschaften lesen
  Set oLink = oShell.ParseName(sLinkFile).GetLink
 
  If Not IsMissing(sTargetFile) Then oLink.Path = sTargetFile               ' Ziel
  If Not IsMissing(sArguments) Then oLink.Arguments = sArguments            ' Aufrufparameter
  If Not IsMissing(sWorkingDir) Then oLink.WorkingDirectory = sWorkingDir   ' Ausführen in
  If Not IsMissing(sDescription) Then oLink.Description = sDescription      ' Beschreibung
 
  ' Geänderte Werte speichern
  oLink.Save
 
  ' Objekte zerstören
  Set oLink = Nothing
  Set oShell = Nothing
 
  LinkUpdate = True
 
  On Error GoTo 0
  Exit Function
 
ErrHandler:
  MsgBox "Fehler beim Speichern der Verknüpfungseigenschaften!" & vbCrLf & vbCrLf & _
    "Fehler " & CStr(Err.Number) & vbCrLf & Err.Description, vbExclamation
 
  Set oLink = Nothing
  Set oShell = Nothing
End Function

Aufrufbeispiel:
Es soll das Ziel in der Verknüpfungsdatei d:\test.lnk neu festgelegt werden:

LinkUpdate "d:\test.lnk", "d:\MyApp\Anwendung.exe"