VBA Tipp: Verknüpfung auf dem Desktop anlegen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

  • Aufgabe 1: Ich möchte eine Verknüpfung auf dem Desktop per Programm anlegen, oder die Eigenschaften einer bestehenden Verknüpfung ändern.
  • Aufgabe 2: Ich möchte eine Verknüpfung auf dem Desktop löschen.

Lösung Aufgabe 1

Vorausgesetzt, der Windows Scripting Host ist auf dem Zielrechner installiert, geht das mit folgender Prozedur, die in einem globalen Modul hinterlegt wird:

Public Sub DesktopsymbolErzeugen( _
           ByVal linkname As String, _
           ByVal programmpfad As String, _
           ByVal verzeichnispfad As String, _
           Optional ByVal parameter As String = "", _
           Optional ByVal iconpfad As String = "", _
           Optional ByVal beschreibung As String = "")
 
 'Erzeugt ein neues Desktopsymbol oder ändert die Eigenschaften eines bestehenden Desktopsymbols
 'Ein bestehender Linkname kann nicht geändert, sondern nur ein neuer Link angelegt werden.
 'Late-Binding-Variante, kein Verweis auf "Windows Script Host Object Model" notwendig
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim WSH            As Object 'Windows scripting host
 Dim desktopsymbol  As Object 'WshShortcut
 Dim desktoppfad    As String
 
 ' Objektvariable mit Windows.Scripting-Host erstellen
 Set WSH = CreateObject("WScript.Shell")
 
 ' Desktoppfad auslesen
 desktoppfad = WSH.SpecialFolders("Desktop")
 
 ' Neue oder bestehende Verknüpfung in Objektvariable einlesen
 Set desktopsymbol = WSH.CreateShortcut(desktoppfad & "\" & linkname & ".lnk")
 
 ' "Ziel" eintragen
 desktopsymbol.TargetPath = programmpfad
 
 ' Beispiele für parameter
 ' parameter = "/wrkgrp " & Chr(34) & PfadZurArbeitsgruppendatei & Chr(34) & Chr(32)
 ' parameter = "/excl" & Chr(32) 'Datenbank exclusiv öffnen
 
 ' Parameter eintragen
 desktopsymbol.Arguments = parameter
 
 ' "Ausführen in" eintragen
 desktopsymbol.WorkingDirectory = verzeichnispfad
 
 '**********************************************************
 ' Weitere mögliche Einträge
 
 ' "Tastenkombination" (Beispiele: CTRL+W, "CTRL+SHIFT+F8")
' desktopsymbol.Hotkey = "CTRL+W"
 
 ' "Ausführen", (4 = Normal, 3 = Maximized, 7 = Minimized)
' desktopsymbol.WindowStyle = 3
 '**********************************************************
 
 ' "Kommentar" eintragen
 desktopsymbol.Description = beschreibung
 
 ' Eigenes Icon zuweisen
 If iconpfad <> "" Then
   desktopsymbol.IconLocation = iconpfad
 End If
 
 ' Element speichern
 desktopsymbol.Save
 
 Set desktopsymbol = Nothing
 Set WSH = Nothing
 
End Sub

Aufruf

 Dim iconpfad As String
 
 'Beispiel: Icon-Datei "favicon.ico" im Unterverzeichnis "Bilder"
 iconpfad = CurrentProject.Path & "\Bilder\favicon.ico"
 
 ' Beispiel 1: Desktopsymbol für die aktuelle Access-Datenbank erzeugen, mit eigenem Icon, ohne Parameter
 Call DesktopsymbolErzeugen("Testverknüpfung", CurrentDb.Name, CurrentProject.Path, , iconpfad)
 
 ' Beispiel 2: Desktopsymbol für die aktuelle Access-Datenbank erzeugen, ohne eigenes Icon, ohne Parameter
 Call DesktopsymbolErzeugen("Testverknüpfung", CurrentDb.Name, CurrentProject.Path)


Lösung Aufgabe 2

Das geht mit folgender Prozedur, die in einem globalen Modul hinterlegt wird:

Public Sub DesktopsymbolLöschen(linkname As String)
 
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim WSH            As Object 'Windows scripting host
 Dim FSO            As Object 'FileSystemObject
 Dim desktoppfad    As String
 Dim dateipfad      As String
 
 Set WSH = CreateObject("WScript.Shell")
 Set FSO = CreateObject("Scripting.FileSystemObject")
 
 ' Desktoppfad auslesen
 desktoppfad = WSH.SpecialFolders("Desktop")
 
 'Dateipfad auslesen
 dateipfad = desktoppfad & "\" & linkname & ".lnk"
 
 'Datei löschen, wenn sie existiert
 On Error Resume Next
 FSO.DeleteFile dateipfad
 
 Set WSH = Nothing
 Set FSO = Nothing
 
End Sub

Aufruf

Call DesktopsymbolLöschen("Testverknüpfung")

Hinweis:

Wenn die Verknüpfung auf dem Desktop gelöscht, und sofort unter dem gleichen Namen wieder angelegt werden soll, muß zwischen beiden Codes eine Wartezeit von 1 Sekunde eingebaut werden, da es nach der Löschung knapp 1 Sekunde dauert, bis der Windows-Desktop aktualisiert wird.


DBWiki-Links

Weblinks


Der Code wurde in Access 2010 unter Windows 7 erstellt, ist aber auch in früheren Accessversionen lauffähig.