解决网络快捷方式

时间:2017-09-13 09:05:19

标签: delphi winapi

我通过网络快捷方式向Windows添加了一些FTP服务器。

如何通过WinAPI获取FTP地址?

使用SHGetFolderPath / CSIDL_NETHOOD,我可以获取target.lnk文件的位置。但是如何获取该文件的FTP URL?

“普通”.lnk文件,我可以解决这个问题:

  ShellLink := CreateComObject(CLSID_ShellLink) as IShellLink;
  ShellLink.QueryInterface(IPersistFile, PersistFile);
  PersistFile.Load('C:\Test.lnk', STGM_READ);
  ShellLink.Resolve(WindowHandle, 0);
  Filename[0] := #0;
  ShellLink.GetPath(PChar(@Filename[0]), Length(Filename), pfd, 0);

...但这不适用于ftp://host/地址的网络快捷方式的Target.lnk文件。

1 个答案:

答案 0 :(得分:3)

IShellLink::GetPath用于检索文件系统路径(仅驱动器号或UNC根)。这在文档中并不清楚,但它在内部使用SHGetPathFromIDListEx,MSDN对此函数有这样的说法:

  

将项目标识符列表转换为文件系统路径

如果您想要原始快捷方式目标,最好的选择通常是IShellLink::GetIDList。您可以使用id-list上的SHGetNameFromIDList(..., SIGDN_DESKTOPABSOLUTEPARSING, ...)来获取解析名称。