如题

解决方案 »

  1.   

    unit LinkUtil;interfaceuses 
      ShlObj, ComObj, ActiveX, CommCtrl, Windows;const MAX_PATH = 1024;type 
      PShellLinkInfoStruct = ^TShellLinkInfoStruct; 
      TShellLinkInfoStruct = record 
        FullPathAndNameOfLinkFile: array[0..MAX_PATH] of Char; 
        FullPathAndNameOfFileToExecute: array[0..MAX_PATH] of Char; 
        ParamStringsOfFileToExecute: array[0..MAX_PATH] of Char; 
        FullPathAndNameOfWorkingDirectroy: array[0..MAX_PATH] of Char; 
        Description: array[0..MAX_PATH] of Char; 
        FullPathAndNameOfFileContiningIcon: array[0..MAX_PATH] of Char; 
        IconIndex: Integer; 
        HotKey: Word;
        ShowCommand: Integer; 
        FindData: TWIN32FINDDATA;
      end;procedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);implementationprocedure GetLinkInfo(lpShellLinkInfoStruct: PShellLinkInfoStruct);
    var
      ShellLink: IShellLink; 
      PersistFile: IPersistFile; 
      AnObj: IUnknown; 
    begin 
      // access to the two interfaces of the object 
      AnObj       := CreateComObject(CLSID_ShellLink); 
      ShellLink   := AnObj as IShellLink; 
      PersistFile := AnObj as IPersistFile;   // Opens the specified file and initializes an object from the file contents. 
      PersistFile.Load(PWChar(WideString(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile)), 0); 
      with ShellLink do 
      begin 
        // Retrieves the path and file name of a Shell link object. 
        GetPath(lpShellLinkInfoStruct^.FullPathAndNameOfFileToExecute, 
          SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfLinkFile), 
          lpShellLinkInfoStruct^.FindData, 
          SLGP_UNCPRIORITY);     // Retrieves the description string for a Shell link object. 
        GetDescription(lpShellLinkInfoStruct^.Description, 
          SizeOf(lpShellLinkInfoStruct^.Description));     // Retrieves the command-line arguments associated with a Shell link object. 
        GetArguments(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute, 
          SizeOf(lpShellLinkInfoStruct^.ParamStringsOfFileToExecute));     // Retrieves the name of the working directory for a Shell link object. 
        GetWorkingDirectory(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy, 
          SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfWorkingDirectroy));     // Retrieves the location (path and index) of the icon for a Shell link object. 
        GetIconLocation(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon, 
          SizeOf(lpShellLinkInfoStruct^.FullPathAndNameOfFileContiningIcon), 
          lpShellLinkInfoStruct^.IconIndex);     // Retrieves the hot key for a Shell link object. 
        GetHotKey(lpShellLinkInfoStruct^.HotKey);     // Retrieves the show (SW_) command for a Shell link object. 
        GetShowCmd(lpShellLinkInfoStruct^.ShowCommand); 
      end; 
    end;end.
    procedure TForm1.Button1Click(Sender: TObject); 
    const 
      br = #13#10; 
    var 
      LinkInfo: TShellLinkInfoStruct;
      s: string; 
    begin
      FillChar(LinkInfo, SizeOf(LinkInfo), #0); 
      LinkInfo.FullPathAndNameOfLinkFile := WordLink;
      GetLinkInfo(@LinkInfo);
      with LinkInfo do
        s := FullPathAndNameOfLinkFile + br + 
          FullPathAndNameOfFileToExecute + br + 
          ParamStringsOfFileToExecute + br + 
          FullPathAndNameOfWorkingDirectroy + br + 
          Description + br + 
          FullPathAndNameOfFileContiningIcon + br + 
          IntToStr(IconIndex) + br + 
          IntToStr(LoByte(HotKey)) + br + 
          IntToStr(HiByte(HotKey)) + br + 
          IntToStr(ShowCommand) + br + 
          FindData.cFileName + br + 
          FindData.cAlternateFileName; 
      Memo1.Lines.Add(s);
    end;http://lysoft.7u7.net