我通过网络快捷方式向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文件。
答案 0 :(得分:3)
IShellLink::GetPath
用于检索文件系统路径(仅驱动器号或UNC根)。这在文档中并不清楚,但它在内部使用SHGetPathFromIDListEx
,MSDN对此函数有这样的说法:
将项目标识符列表转换为文件系统路径
如果您想要原始快捷方式目标,最好的选择通常是IShellLink::GetIDList
。您可以使用id-list上的SHGetNameFromIDList(..., SIGDN_DESKTOPABSOLUTEPARSING, ...)
来获取解析名称。