Uses ActiveX, ShlObj;
function GetLinkFile(const LnkFileName: String; var FileName: String): Boolean;
var
hr: HRESULT;
psl: IShelllink;
wfd: WIN32_FIND_DATA;
ppf: IPersistFile;
lpw: pWideChar;
buf: pWideChar;
InternalFileName: Array[0..MAX_PATH] of Char;
begin
Result := False;
GetMem(buf, MAX_PATH);
try
if Succeeded(CoInitialize(nil)) then
if (Succeeded(CocreateInstance(CLSID_SHELLLINK, Nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, psl))) then
begin
hr := psl.QueryInterface(iPersistFile, ppf);
if Succeeded(hr) then
begin
lpw := StringToWideChar(LnkFileName, buf, MAX_PATH);
hr := ppf.Load(lpw, STGM_READ);
if Succeeded(hr) then
begin
hr := psl.Resolve(0, SLR_NO_UI);
if Succeeded(hr) then
begin
psl.GetPath(InternalFileName, MAX_PATH, wfd, SLGP_SHORTPATH);
FileName := InternalFileName;
Result := True;
end;
end;
end;
end;
finally
FreeMem(buf);
end;
end;
本文介绍了一个Delphi函数GetLinkFile,该函数用于从.lnk快捷方式文件中提取目标文件路径。通过COM接口与Shell Link对象交互,实现了跨平台获取文件实际路径的功能。

2270

被折叠的 条评论
为什么被折叠?



