https://blog.csdn.net/dbyoung/article/details/7020324

如何读取快捷方式的信息和生成一个快捷方式?

  1.  
    unit untLnkInfo;
  2.  
     
  3.  
    interface
  4.  
     
  5.  
    uses Windows, ActiveX, ComObj, ShlObj;
  6.  
     
  7.  
    type
  8.  
    TLINK_FILE_INFO = record
  9.  
    Filename: array [0 .. MAX_PATH] of Char; { 目标文件名 }
  10.  
    WorkDirectory: array [0 .. MAX_PATH] of Char; { 工作目录或者起始目录 }
  11.  
    IconLocation: array [0 .. MAX_PATH] of Char; { 图标文件名 }
  12.  
    IconIndex: Integer; { 图标索引 }
  13.  
    Arguments: array [0 .. MAX_PATH] of Char; { 程序运行的参数 }
  14.  
    Description: array [0 .. 255] of Char; { 快捷方式的描述 }
  15.  
    ItemIDList: PItemIDList; { 只供读取使用 }
  16.  
    RelativePath: array [0 .. 255] of Char; { 相对目录,只能设置 }
  17.  
    ShowState: Integer; { 运行时的窗口状态 }
  18.  
    HotKey: Word; { 快捷键 }
  19.  
    end;
  20.  
     
  21.  
    { 读取快捷方式信息 }
  22.  
    procedure GetLinkFileInfo(LnkFileName: String; var LnkInfo: TLINK_FILE_INFO);
  23.  
     
  24.  
    implementation
  25.  
     
  26.  
    { 读取快捷方式信息 }
  27.  
    procedure GetLinkFileInfo(LnkFileName: String; var LnkInfo: TLINK_FILE_INFO);
  28.  
    var
  29.  
    LnkObj : IUnknown;
  30.  
    ShellPFile : IPersistFile;
  31.  
    ShellLink : IShellLink;
  32.  
    WideFileName: WideString;
  33.  
    pfd : WIN32_FIND_DATA;
  34.  
    begin
  35.  
    FillChar(LnkInfo, SizeOf(LnkInfo), #0);
  36.  
    LnkObj := CreateComObject(CLSID_ShellLink);
  37.  
    ShellPFile := LnkObj as IPersistFile;
  38.  
    ShellLink := LnkObj as IShellLink;
  39.  
    WideFileName := LnkFileName;
  40.  
    ShellPFile.Load(PWideChar(WideFileName), 0);
  41.  
    ShellLink.GetPath(LnkInfo.Filename, MAX_PATH, pfd, SLGP_UNCPRIORITY); { 获取快捷方式文件路径 }
  42.  
    ShellLink.GetWorkingDirectory(LnkInfo.WorkDirectory, MAX_PATH); { 获取快捷方式工作目录 }
  43.  
    ShellLink.GetIconLocation(LnkInfo.IconLocation, MAX_PATH, LnkInfo.IconIndex); { 获取快捷方式图标文件,和图标索引 }
  44.  
    ShellLink.GetArguments(LnkInfo.Arguments, MAX_PATH); { 获取快捷方式运行参数 }
  45.  
    ShellLink.GetDescription(LnkInfo.Arguments, MAX_PATH); { 获取快捷方式描述 }
  46.  
    ShellLink.GetShowCmd(LnkInfo.ShowState); { 获取快捷方式运行方式,1:常规窗体;2:最小化;3:最大化 }
  47.  
    ShellLink.GetHotkey(LnkInfo.HotKey); { 获取快捷方式快捷键 }
  48.  
    ShellLink := nil;
  49.  
    ShellPFile := nil;
  50.  
    end;
  51.  
     
  52.  
    { 注:
  53.  
    发现没有,获取都是用 ShellLink.Get...,
  54.  
    所以,创建,就是ShellLink.Set...了,自己动手写写了。
  55.  
    这里就不罗嗦了。
  56.  
    }
  57.  
     
  58.  
    end