Frage

Gibt es eine Möglichkeit, eine Windows-Verknüpfung (.lnk-Datei) zu öffnen und das Ziel ändern? Ich fand den folgenden Code-Schnipsel, die mir das aktuelle Ziel zu finden, aber es ist eine schreibgeschützte Eigenschaft:

Shell32::Shell^ shl = gcnew Shell32::Shell();
String^ shortcutPos = "C:\\some\\path\\to\\my\\link.lnk";
String^ lnkPath = System::IO::Path::GetFullPath(shortcutPos);
Shell32::Folder^ dir = shl->NameSpace(System::IO::Path::GetDirectoryName(lnkPath));
Shell32::FolderItem^ itm = dir->Items()->Item(System::IO::Path::GetFileName(lnkPath));
Shell32::ShellLinkObject^ lnk = (Shell32::ShellLinkObject^)itm->GetLink;
String^ target = lnk->Target->Path;

Ich kann nichts finden, das Ziel zu ändern. Ist meine einzige Option, um eine neue Verknüpfung zu erstellen und die alten zu überschreiben? ..und wenn ja, wie mache ich das?

War es hilfreich?

Lösung

Es ist nicht schreibgeschützt ist, Gebrauch lnk-> Pfad statt, gefolgt von lnk-> Save (). Vorausgesetzt, dass Sie Schreibrechte auf die Datei haben. C # -Code, der die gleiche Sache tut, ist in meiner Antwort in dieses Thema .

Andere Tipps

Recreating eine Verknüpfung mit WSH

Sie können eine bestehende Verknüpfung entfernen und einen neuen mit dem neuen Ziel erstellen. Um einen neuen zu erstellen, können Sie das folgende Snippet verwenden:

public void CreateLink(string shortcutFullPath, string target)
{
    WshShell wshShell = new WshShell();
    IWshRuntimeLibrary.IWshShortcut newShortcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(shortcutFullPath);
    newShortcut.TargetPath = target;
    newShortcut.Save();
}

Für den Moment, ich sehe keinen Weg, um das Ziel zu ändern, ohne die Verknüpfung neu zu erstellen.

. Hinweis: Bitte Code zu verwenden, müssen Sie fügen Windows Script Host-Objektmodell COM zu den Projektreferenzen

Ändern der Zielpfad mit Shell32

Hier ist der Code-Schnipsel, die das Ziel einer Verknüpfung ändert, ohne zu entfernen und neu zu erstellen:

public void ChangeLinkTarget(string shortcutFullPath, string newTarget)
{
    // Load the shortcut.
    Shell32.Shell shell = new Shell32.Shell();
    Shell32.Folder folder = shell.NameSpace(Path.GetDirectoryName(shortcutFullPath));
    Shell32.FolderItem folderItem = folder.Items().Item(Path.GetFileName(shortcutFullPath));
    Shell32.ShellLinkObject currentLink = (Shell32.ShellLinkObject)folderItem.GetLink;

    // Assign the new path here. This value is not read-only.
    currentLink.Path = newTarget;

    // Save the link to commit the changes.
    currentLink.Save();
}

Das zweite ist wahrscheinlich das, was Sie brauchen.

Hinweis: Leider sind die Schnipsel in C #, da ich nicht weiß, C ++ / CLI. Wenn jemand will diesen Schnipsel für C ++ / CLI neu zu schreiben, können Sie meine Antwort zu bearbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top