2009-04-29 3 views
1

Я хочу получить название ярлыка, а не имя файла, а не описание, но название. как его получить?C#, Как решить заголовок * .lnk?

Я должен научиться решать свою целевой путь здесь, How to resolve a .lnk in c#

, но я не найти какой-либо метод, чтобы получить свое название.

http://lh4.ggpht.com/_2HeweEMiLbg/SfkeMXlpbmI/AAAAAAAAIDE/eucex2mloOo/s912/vista-lnk.jpg

http://lh6.ggpht.com/_2HeweEMiLbg/Sfkf5eerapI/AAAAAAAAIDM/u5GqEWvgc74/lnk-properties-dlg.jpg

+0

Что вы подразумеваете под заголовком? В свойствах нет ярлыка для ярлыков, а также в документах IShellLink. – paxdiablo

+0

Я знаю это, но на Vista, Notepad.lnk дисплей «记事 本» (китайский блокнот означает). но имя файла - Notepad.lnk. –

+0

Этот сайт не может размещать изображение, поэтому я не могу загрузить картинку, покажу свой вопрос ... –

ответ

1

В каталоге ярлыков есть скрытый файл Desktop.ini, в файлах файлов Desktop.ini отображаются строки информации о ярлыках.

Desktop.ini образец файла:

 
[LocalizedFileNames] 
Windows [email protected]%SystemRoot%\system32\wucltux.dll,-1 
Default [email protected]%SystemRoot%\system32\sud.dll,-1 
+0

Хорошая находка! Это дает вам ответ, или вы все еще ищете способ добраться до строки? –

+0

@Steven Richards, я написал демо-код для реализации. нет никаких вопросов, чтобы получить строки. –

-1

Осмотревшись на создание ярлыков, похоже, есть много прыгать через обручи с объектами сценариев. Но я что-то упускаю? Если у вас есть путь к ярлыку, имя должно быть именно тем, что вы находите в пути, а не каким-то атрибутом, который вам нужно искать.

Dim f As FileInfo = New FileInfo("C:\Name of shortcut.lnk") 
    Dim title As String = f.Name.Replace(".lnk", String.Empty) 
+0

НЕТ, мне не нужно имя файла. Спасибо за ваш ответ. , чтобы получить имя файла без использования «Path.GetFileNameWithoutExtension» –

0

Укажите «название». Единственными атрибутами, которые соответствуют звуку, являются имя файла ярлыка, имя файла цели и данные описания файла .lnk.

+2

@ Анон, ответы обычно не используются в качестве доски обсуждений. Это лучше оставить в качестве комментария к вопросу - вы рискуете downvotes, делая это (не от меня, так как я снисходителен к новичкам). – paxdiablo

+0

Я попросил разъяснений. Если это было бы более подходящим для комментария, то вы говорите, что мне не разрешают просить разъяснений? Комментарии требуют 50 «репутации», а «ответы» - нет. Пожалуйста, объясните, что я должен делать по-другому. – Anonymous

+0

Это разъяснение уже было предложено в комментариях. – paxdiablo

0

Предполагая, что вы имеете в виду название файла, на который указывает ссылка, а не сама ссылка, и что вы говорите о Windows, то это делается с помощью функции в NTFS, альтернативных потоках. Вы можете получить доступ к этим потокам, используя код в этом article.

2

Похоже, вы пытаетесь получить название файла, на который указывает ссылка, как предлагает JRL.

Если вы не пытаясь сделать это, я бы рекомендовал открыть один из этих .lnk-файлов в шестнадцатеричном редакторе, например XVI32. Вероятно, вы можете сказать, будет ли отображаемое китайское имя встроено в файл .lnk или находится где-то в другом месте.

Если это где-то еще, это может быть расширенное свойство файла. Там некоторый исходный код, который может помочь при получении этой информации: Extended File Properties

Если по какой-то шанс, что это является внутри файла .lnk, я рекомендую смотреть на Windows Shortcut Specification, чтобы получить информацию о смещении и таких на месте этих данных.

0

Вы можете использовать системное свойство API, в последней части кода разблокировки, пакет:

(все 670+ свойства в системе с помощью простых подъезд аксессоров недвижимости)

http://code.msdn.microsoft.com/WindowsAPICodePack

Я знаю, что текущая потребность ограничивается только название LNK-файлов. Используя приведенную выше библиотеку, пример кода может выглядеть так:

ShellLink myLink = ShellObject.FromParsingName ("c: \ somepath \ myLink.lnk");

string title = myLink.Properties.System.Title.Стоимость;

// Это то, что он указывает на ... string target = myLink.Properties.System.TargetParsingPath.Value;

+0

Да, это также решит проблему. Благодарю. –