Как вы получаете цель каталога в папке быстрого доступа? Я ищу повсюду и только находит целевой файл ярлыков.Получить целевую папку с ярлыками
ответ
Я думаю, вам нужно будет использовать COM и добавить ссылку на «Microsoft Control Shell и автоматизации», как описано в this blog post:
Вот пример использования кода при условии:
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));
}
}
}
Спасибо! Теперь мне просто нужно выяснить, как искать папку shortcuf programmatical :) :) –
Я работаю на 64-разрядной версии Windows 7, и не удается найти ярлык для VirtualBox, установленный в 'C: \ Program Files \ Oracle \ VirtualBoxOSX'. Он продолжал возвращать цель в папку 'C: \ Program Files (x86) \ Oracle \ VirtualBoxOSX \ VirtualBox.exe'. Любое объяснение этого поведения? – swdev
Использование Shell32 с помощью этого метода допускает только однопоточное приложение. Вы должны включить [STAThread] в основную точку входа. Вы получите исключение в модульном тестировании с помощью этого кода, потому что модульное тестирование не позволяет STAThread. см. [ответ] (http://stackoverflow.com/questions/14543340/calling-shell32-dll-from-net-windows-service). Существует также решение для запуска этого кода в модульном тестировании, см. Http://haacked.com/archive/2014/11/20/xunit-and-sta/ – yancyn
Все ярлыки файлов имеют расширение .lnk, которое вы можете проверить. Например, используя строку, вы можете использовать string.EndsWith (". Lnk") в качестве фильтра.
Все ярлыки URL-адресов имеют расширение .url, поэтому вам также необходимо будет учитывать их, если это необходимо.
. ОП спросил, как получить целевой каталог ярлыка, а не как проверьте, является ли это ярлыком. –
Если вы не хотите использовать зависимости, вы можете использовать https://blez.wordpress.com/2013/02/18/get-file-shortcuts-target-with-c/ Но формат lnk недокументирован, поэтому делайте это только в том случае, если вы понимаете риски.
, если вы хотите найти свой путь к приложению, которое ярлык на рабочем столе, простой способ, который я использую, заключается в следующем:
Process.GetCurrentProcess().MainModule.FileName.Substring(0, Process.GetCurrentProcess().MainModule.FileName.LastIndexOf("\\")
этого код возврата любого еха путь, который работает, независимо тем, кто просил файл
еще более простой способ получить связанный путь, который я использую:
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);
}
Но это, конечно, перерыв, если изменения формата LNK-файлов.
В окнах 10 это должно быть сделано, как это, первым добавить COM ссылки на «Microsoft Control Shell и автоматизация»
// 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. Загрузка файлов в целевую папку
- 2. Проблемы с загрузкой файлов в целевую папку
- 3. Как игнорировать целевую папку в TortoiseSVN
- 4. Как исключить целевую папку из сканирования Fortify
- 5. Makefiles - Компиляция на другую целевую папку
- 6. ExtJs - Текстовое поле с динамическими ярлыками-ярлыками
- 7. HTML-форма: Как получить слайдер с ярлыками?
- 8. Как удалить целевую папку, созданную с помощью scp целевым пользователем
- 9. Как распаковать файл в целевую папку с помощью 7-Zip
- 10. Ползунок с ярлыками WinRT
- 11. PieChart с ярлыками
- 12. Сложенная диаграмма с ярлыками
- 13. проблема с ярлыками richfaces
- 14. Работа с ярлыками Windows 10
- 15. Windows ContextMenu C++ с ярлыками в выборе
- 16. загрузить файл в целевую папку на основе определенных категорий
- 17. XC UITesting с динамическими ярлыками
- 18. C# копирование файлов из исходной папки в целевую папку
- 19. Нельзя игнорировать целевую папку от клиента Tortoise SVN
- 20. Maven - Зависимости во внешних библиотеках, не копирующих в целевую папку
- 21. Maven: скопировать заархивированные подкаталоги ресурсов в целевую папку
- 22. Переместить текстовый файл в целевую папку при компиляции проекта Maven
- 23. Связанные ссылки на проекты не копируются в целевую папку
- 24. Как определить другую целевую папку для некоторых зависимостей в Maven
- 25. Копирование файлов из исходной папки в целевую папку
- 26. maven: копировать ресурс из зависимой jar в целевую папку
- 27. Классификация документов с несколькими ярлыками
- 28. Сложенная диаграмма с центрированными ярлыками
- 29. События с ярлыками на ярлыках
- 30. Динамическая ширина ввода с ярлыками
это не относится к МОФ вообще, я удалил тег –
Это Я предпочитаю: [Как получить имя пути из ярлыка файла?] (http://stackoverflow.com/a/13079688/3757210) – ilcorvo