Jak uzyskać docelowy katalog folderu skrótów? Wszędzie szukam i znajduję tylko docelowy plik skrótu.Pobierz cel folderu skrótów
Odpowiedz
myślę, że będzie trzeba użyć COM i dodać odwołanie do „Microsoft Kontroli Shell i automatyzacja”, jak opisano w this blog post:
Oto przykład przy użyciu kodu pod warunkiem, że:
namespace Shortcut
{
using System;
using System.Diagnostics;
using System.IO;
using Shell32;
class Program
{
public static string GetShortcutTargetFile(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell shell = new Shell();
Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return string.Empty;
}
static void Main(string[] args)
{
const string path = @"C:\link to foobar.lnk";
Console.WriteLine(GetShortcutTargetFile(path));
}
}
}
Dzięki! Teraz po prostu muszę dowiedzieć się, jak programowo szukać folderu shortcuf :) –
Pracuję na 64-bitowym systemie Windows 7 i nie mogę znaleźć skrótu do VirtualBox zainstalowanego w 'C: \ Program Files \ Oracle \ VirtualBoxOSX'. Wciąż zwracał cel, aby znaleźć się w 'C: \ Program Files (x86) \ Oracle \ VirtualBoxOSX \ VirtualBox.exe'. Jakieś wyjaśnienie tego zachowania? – swdev
Używanie Shell32 w tej metodzie dozwolone jest tylko w aplikacji z jednym wątkiem. Musisz uwzględnić [STAThread] w głównym punkcie wejścia. Otrzymasz wyjątek w testowaniu jednostkowym z tym kodem, ponieważ testowanie jednostkowe nie pozwala STAThread. patrz [odpowiedź] (http://stackoverflow.com/questions/14543340/calling-shell32-dll-from-net-windows-service). Istnieje również rozwiązanie do uruchomienia tego kodu w testowaniu jednostkowym, patrz http://haacked.com/archive/2014/11/20/xunit-and-sta/ – yancyn
Wszystkie skróty plików mają rozszerzenie .lnk, które można sprawdzić. Używając na przykład łańcucha, możesz użyć string.EndsWith (".lnk") jako filtra.
Wszystkie skróty adresu URL mają rozszerzenie pliku .url, więc w razie potrzeby należy je uwzględnić również w przypadku tych skrótów.
OP zapytał, jak uzyskać docelowy katalog skrótu, a nie jak sprawdź, czy jest skrótem. –
Jeśli nie chcesz używać zależności, możesz użyć https://blez.wordpress.com/2013/02/18/get-file-shortcuts-target-with-c/ Ale format lnk jest nieudokumentowany, więc rób to tylko wtedy, gdy rozumiesz ryzyko.
jeśli chcesz znaleźć swoją ścieżkę aplikacji, która ma skrót na pulpicie, w łatwy sposób, że używam, jest następujący:
Process.GetCurrentProcess().MainModule.FileName.Substring(0, Process.GetCurrentProcess().MainModule.FileName.LastIndexOf("\\")
ten kod powrotu dowolną ścieżkę exe, który działa niezależnie, że kto żądany plik
jeszcze prostszy sposób, aby uzyskać połączoną ścieżkę że używam to:
private static string LnkToFile(string fileLink)
{
string link = File.ReadAllText(fileLink);
int i1 = link.IndexOf("DATA\0");
if (i1 < 0)
return null;
i1 += 5;
int i2 = link.IndexOf("\0", i1);
if (i2 < 0)
return link.Substring(i1);
else
return link.Substring(i1, i2 - i1);
}
Ale to będzie przerwy oczywiście jeśli zmiany formatu LNK-plików.
W oknach 10 to musi być zrobione tak, najpierw dodać odwołanie COM do „Microsoft sterowania Shell i automatyzacja”
// new way for windows 10
string targetname;
string pathOnly = System.IO.Path.GetDirectoryName(LnkFileName);
string filenameOnly = System.IO.Path.GetFileName(LnkFileName);
Shell shell = new Shell();
Shell32.Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null) {
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
targetname = link.Target.Path; // <-- main difference
if (targetname.StartsWith("{")) { // it is prefixed with {54A35DE2-guid-for-program-files-x86-QZ32BP4}
int endguid = targetname.IndexOf("}");
if (endguid > 0) {
targetname = "C:\\program files (x86)" + targetname.Substring(endguid + 1);
}
}
- 1. Pobierz rozmiar folderu
- 2. Pobierz bieżącą ścieżkę folderu
- 3. Jaki jest cel folderu grads buildSrc?
- 4. Pobierz losowy obraz PHP z folderu
- 5. TFS Pobierz wersję specjalną do osobnego folderu
- 6. Pobierz wszystkie obrazy z lokalnego folderu
- 7. pobierz wszystkie obrazy z folderu w php
- 8. pobierz ścieżkę do folderu galerii w Androidzie
- 9. TFS Pobierz najnowszą wersję ze określonego folderu
- 10. C# skrótów
- 11. Pobierz plik do folderu Pobieranie urządzenia za pomocą Cordova FileTransfer
- 12. Pobierz plik wewnątrz folderu widoków w ASP.Net MVC 4.0
- 13. Pobierz listę plików z folderu SkyDrive (Windows Phone)
- 14. Węzeł js Pobierz ścieżkę do folderu z pliku
- 15. Jaki jest cel CMakeScripts?
- 16. Używanie skrótów w LaTeX
- 17. Jak zmienić zachowanie skrótów?
- 18. Tabele skrótów w prologu
- 19. Jak scalić wiele skrótów?
- 20. Vim: lista darmowych skrótów
- 21. skrótów Wyłącz Internet Explorer
- 22. Antlr4 Cel C++
- 23. globalne klawisze skrótów w języku Java
- 24. C# Szybsza generacja skrótów MD5
- 25. Wyliczanie przypisanych skrótów w Excelu
- 26. Jak zdobyć tablicę skrótów JavaScript?
- 27. Jak zrzucić zawartość mapy skrótów?
- 28. Co to jest uwierzytelnianie skrótów?
- 29. Metoda "zliczania" ruby dla skrótów
- 30. Jak pogrupować tę tablicę skrótów?
ten nie odnosi się do WPF w ogóle, usunąłem tag –
To rozwiązanie Wolę: [Jak uzyskać nazwę ścieżki ze skrótu do pliku?] (http://stackoverflow.com/a/13079688/3757210) – ilcorvo