//下面这个例子演示了如何从一个.lnk文件得到他的“目标”,希望能对你有所帮助。function GetLinkFileName(sLinkFileName: string; var sTargetFileName: string): boolean;
var
  psl: IShellLink;
  ppf: IPersistFile;
  hres, nLen: integer;
  pfd: TWin32FindData;
  pTargetFile: PChar;
  pwLinkFileName: PWideChar;
begin
  Result := false;
  if SUCCEEDED(CoInitialize(nil)) then
  begin
    CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, psl);
    if (SUCCEEDED(hres)) then
    begin
      hres := psl.QueryInterface(IID_IPersistFile, ppf);
      if (SUCCEEDED(hres)) then
      begin
        
        nLen := MultiByteToWideChar(CP_ACP, 0, PChar(sLinkFileName), -1, pwLinkFileName, 0);
        GetMem(pwLinkFileName, nLen);
        ZeroMemory(pwLinkFileName, nLen);
        MultiByteToWideChar(CP_ACP, 0, PChar(sLinkFileName), -1, pwLinkFileName, nLen);        ppf.Load(pwLinkFileName, STGM_READ);        GetMem(pTargetFile, MAX_PATH);
        ZeroMemory(pTargetFile, MAX_PATH);
        hres := psl.GetPath(pTargetFile, MAX_PATH, pfd, SLGP_UNCPRIORITY );
        if (SUCCEEDED(hres)) then
        begin
          sTargetFileName := StrPas(pTargetFile);
          Result := true;
        end;
        FreeMem(pTargetFile);
        FreeMem(pwLinkFileName);
      end;
    end;
  end;
end;