Obter informações de atalho

Top  Previous  Next

uses

  ShlObj,

  ComObj,

  ActiveX,

  CommCtrl;

 

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);

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;

 

procedure TForm1.Button1Click(Sender: TObject);

const

  br = #13#10;

var

  LinkInfo: TShellLinkInfoStruct;

  s: string;

begin

  FillChar(LinkInfo, SizeOf(LinkInfo), #0);

  LinkInfo.FullPathAndNameOfLinkFile := 'C:\WINNT\Profiles\user\Desktop\FileName.lnk';

  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;