Извлечение пути для exe из файла .lnk
Привет..я хотел бы извлечь целевой путь ярлыка...
есть какая-нибудь помощь?
Что я уже пробовал:
я искал в google, но мне не очень повезло ....
извините за то, что я публикую это на вкладке решения..но я не нахожу решение кода ввода в разделе " обычные комментарии"
хорошо, я немного эволюционировал...теперь я работаю с этим:
<pre> Private Sub pic1_DragDrop(sender As Object, e As DragEventArgs) Handles pic1.DragDrop Dim pathy = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim ini As New IniFile(pathy & "\D-OCKT\Pool.ini") If e.Data.GetDataPresent(DataFormats.FileDrop) Then Dim filePaths As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) For Each fileLoc As String In filePaths If File.Exists(fileLoc) Then On Error Resume Next Dim shl = New Shell32.Shell() fileLoc = System.IO.Path.GetFullPath(fileLoc) Dim dir = shl.[NameSpace](System.IO.Path.GetDirectoryName(fileLoc)) Dim itm = dir.Items().Item(System.IO.Path.GetFileName(fileLoc)) Dim lnk = DirectCast(itm.GetLink, Shell32.ShellLinkObject) Dim pat1 = lnk.Target.Path pic1.Image = Drawing.Icon.ExtractAssociatedIcon(pat1).ToBitmap() Dim result As String result = Path.GetFileNameWithoutExtension(pat1) name1.Text = result ini.WriteValue("Slot 1", "Fold", "0") ini.WriteValue("Slot 1", "Fil", "1") ini.WriteValue("Slot 1 ", "Nam", result) ini.WriteValue("Slot 1", "Pat", pat1) End If Next fileLoc End If End Sub
теперь я слепа к этому.он работает, но только с ярлыками.я хочу, чтобы он работал как с ярлыками, так и с собственными файлами..какая-нибудь помощь?!
Не все так просто! Начать здесь: [MS-SHLLINK]: Shell Link (.LNK) двоичный формат файла[^] , Который предоставляет вам спецификации формата файла.
Из этого вы должны быть в состоянии прочитать файл и расшифровать, где на самом деле находится цель - но это не будет тривиально!
В Google Search есть много ответов для вас: c# Extract path for exe from .lnk - поиск в Google[^] ... выберите тот, который лучше всего соответствует вашим потребностям...
у меня есть этот код:
<pre> Dim pathy = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim ini As New IniFile(pathy & "\D-OCKT\Pool.ini") If e.Data.GetDataPresent(DataFormats.FileDrop) Then Dim filePaths As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) For Each fileLoc As String In filePaths If File.Exists(fileLoc) Then On Error Resume Next pic1.Image = Drawing.Icon.ExtractAssociatedIcon(fileLoc).ToBitmap() Dim fileName As String = fileLoc Dim result As String result = Path.GetFileNameWithoutExtension(fileName) name1.Text = result ini.WriteValue("Slot 1", "Fold", "0") ini.WriteValue("Slot 1", "Fil", "1") ini.WriteValue("Slot 1 ", "Nam", result) ini.WriteValue("Slot 1", "Pat", fileLoc) End If Next fileLoc End If
ini.WriteValue("Slot 1", "Pat", fileLoc)
Я собирался понизить голос за этот ответ, потому что ... но... Я не мог придумать действительно веской причины.
я думаю, что я получил его ... просто нужно, чтобы кто-то подтвердил, если код в порядке или если его плохое кодирование..
Теперь это работает...что думают об этом эксперты ... должен ли я сохранить этот код или внести изменения?..какие изменения???
<pre> Private Sub pic1_DragDrop(sender As Object, e As DragEventArgs) Handles pic1.DragDrop Dim pathy = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim ini As New IniFile(pathy & "\D-OCKT\Pool.ini") If e.Data.GetDataPresent(DataFormats.FileDrop) Then Dim filePaths As String() = CType(e.Data.GetData(DataFormats.FileDrop), String()) For Each fileLoc As String In filePaths If File.Exists(fileLoc) Then On Error Resume Next Dim shl = New Shell32.Shell() fileLoc = System.IO.Path.GetFullPath(fileLoc) Dim dir = shl.[NameSpace](System.IO.Path.GetDirectoryName(fileLoc)) Dim itm = dir.Items().Item(System.IO.Path.GetFileName(fileLoc)) Dim lnk = DirectCast(itm.GetLink, Shell32.ShellLinkObject) Dim pat1 = lnk.Target.Path If File.Exists(pat1) Then On Error Resume Next pic1.Image = Drawing.Icon.ExtractAssociatedIcon(pat1).ToBitmap() Dim result As String result = Path.GetFileNameWithoutExtension(pat1) name1.Text = result ini.WriteValue("Slot 1", "Fold", "0") ini.WriteValue("Slot 1", "Fil", "1") ini.WriteValue("Slot 1 ", "Nam", result) ini.WriteValue("Slot 1", "Pat", pat1) Else If File.Exists(fileLoc) Then Dim pat2 = fileLoc pic1.Image = Drawing.Icon.ExtractAssociatedIcon(pat2).ToBitmap() Dim result As String result = Path.GetFileNameWithoutExtension(pat2) name1.Text = result ini.WriteValue("Slot 1", "Fold", "0") ini.WriteValue("Slot 1", "Fil", "1") ini.WriteValue("Slot 1 ", "Nam", result) ini.WriteValue("Slot 1", "Pat", pat2) End If End If End If Next fileLoc End If End Sub