Sonntag, 25. Juli 2010

Verknüpfung auf dem Desktop erstellen

Verknüpfungen auf dem Desktop sind meistens einfach "normale" Dateien mit der Endung ".lnk" (für Link). Mit C# solche Dateien anzulegen und mit dem richtigen Inhalt zu füllen ist etwas aufwendiger und geht meines Wissens nach nur über das Einbinden des COM - Objekts Windows Script Host Object Model.
In diesem Post zeige ich deshalb, wie man statt ".lnk" - Dateien ".url" - Dateien erzeugt - sie haben die gleiche Funktionalität, können aber mit .Net Bordmitteln ganz einfach erzeugt werden.
Diese Dateien sind hauptsächlich dazu da, Verknüpfungen auf Internetseiten darzustellen, sie können aber eben auch dazu verwendet werden, Dateiverknüpfungen anzulegen.
Die folgende Funktion erstellt eine Verknüpfung im Pfad shortcutPath, wobei shortcutDest den Pfad zum zu verknüpfenden Programm angibt und shortcutIcon den Pfad zum Icon, welches als Symbol für die Verknüpfung angezeigt werden soll:

private void CreateShortcut(string shortcutPath, string shortcutDest, string shortcutIcon)
{
    StreamWriter sw = new StreamWriter(shortcutPath);
    sw.WriteLine("[InternetShortcut]");
    sw.WriteLine("URL=file:///" + shortcutDest);
    sw.WriteLine("IconIndex=0");
    sw.WriteLine("IconFile=" + shortcutIcon);
    sw.Close();
}

Um nun eine Verknüpfung auf dem Desktop anzulegen, muss die Funktion ungefähr so aufgerufen werden:

CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Meine Verknüpfung.url", "C:\\Programme\\WinRAR\\WinRAR.exe", "C:\\MeinIcon.ico");

Kommentare:

  1. Danke,

    hat mir den Nachmittag gerettet :)

    AntwortenLöschen
  2. geht das nur noch ein wenig einfacher???

    AntwortenLöschen
  3. @Anonym #2, wie einfach soll es denn noch werden? ;-)

    AntwortenLöschen
  4. Naja ist nicht gerade prickelnd so.
    Warum nicht einfach die Referenz für
    "Windows Script Host Object Model" hinzufügen und
    dann einfach "using IWshRuntimeLibrary;"

    Und folgenden Code verwenden:
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

    WshShell shell = new WshShell();
    IWshShortcut link = (IWshShortcut)shell.CreateShortcut(deskDir + "\\Verknüpfung.lnk");
    link.IconLocation = Pfad + "\\Icon.ico";
    link.TargetPath = Pfad;
    link.Save();

    AntwortenLöschen
  5. Hey,

    ich bin noch ein Anfänger was C# betrifft. Ich habe eine Frage wie ich den Code genau umändern muss wenn ich in einem anderen Ordner eine Verknüpfung erstellen möchte?

    CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Meine Verknüpfung.url", "C:\\Programme\\WinRAR\\WinRAR.exe", "C:\\MeinIcon.ico");

    In diesem teil, was mich verwirrt ist das Enviroment zeug :(

    AntwortenLöschen
  6. Environment steht für System-Umgebung von Windows. Die Methode GetFolderPath ruft deine Speziellen Windows Ordner von Windows ab. Das Argument der Methode beschreibt den Speziellen Ort der zurückgegeben werden soll. Zudem gibt die Methode einen einfachen Ordnerpfad zurück. Du kannst also jeden beliebigen Pfad angeben im ersten Argument von CreateShortcut. Weiter Informationen zu Environment findest du bei Google mit "msdn".

    AntwortenLöschen
  7. Danke, genau was ich gesucht hab ^^

    AntwortenLöschen