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

unit untLnkInfo;

interface

uses Windows, ActiveX, ComObj, ShlObj;

type
  TLINK_FILE_INFO = record
    Filename: array [0 .. MAX_PATH] of Char;      { 目标文件名 }
    WorkDirectory: array [0 .. MAX_PATH] of Char; { 工作目录或者起始目录 }
    IconLocation: array [0 .. MAX_PATH] of Char;  { 图标文件名 }
    IconIndex: Integer;                           { 图标索引 }
    Arguments: array [0 .. MAX_PATH] of Char;     { 程序运行的参数 }
    Description: array [0 .. 255] of Char;        { 快捷方式的描述 }
    ItemIDList: PItemIDList;                      { 只供读取使用 }
    RelativePath: array [0 .. 255] of Char;       { 相对目录,只能设置 }
    ShowState: Integer;                           { 运行时的窗口状态 }
    HotKey: Word;                                 { 快捷键 }
  end;

  { 读取快捷方式信息 }
procedure GetLinkFileInfo(LnkFileName: String; var LnkInfo: TLINK_FILE_INFO);

implementation

{ 读取快捷方式信息 }
procedure GetLinkFileInfo(LnkFileName: String; var LnkInfo: TLINK_FILE_INFO);
var
  LnkObj      : IUnknown;
  ShellPFile  : IPersistFile;
  ShellLink   : IShellLink;
  WideFileName: WideString;
  pfd         : WIN32_FIND_DATA;
begin
  FillChar(LnkInfo, SizeOf(LnkInfo), #0);
  LnkObj       := CreateComObject(CLSID_ShellLink);
  ShellPFile   := LnkObj as IPersistFile;
  ShellLink    := LnkObj as IShellLink;
  WideFileName := LnkFileName;
  ShellPFile.Load(PWideChar(WideFileName), 0);
  ShellLink.GetPath(LnkInfo.Filename, MAX_PATH, pfd, SLGP_UNCPRIORITY);         { 获取快捷方式文件路径 }
  ShellLink.GetWorkingDirectory(LnkInfo.WorkDirectory, MAX_PATH);               { 获取快捷方式工作目录 }
  ShellLink.GetIconLocation(LnkInfo.IconLocation, MAX_PATH, LnkInfo.IconIndex); { 获取快捷方式图标文件,和图标索引 }
  ShellLink.GetArguments(LnkInfo.Arguments, MAX_PATH);                          { 获取快捷方式运行参数 }
  ShellLink.GetDescription(LnkInfo.Arguments, MAX_PATH);                        { 获取快捷方式描述 }
  ShellLink.GetShowCmd(LnkInfo.ShowState);                                      { 获取快捷方式运行方式,1:常规窗体;2:最小化;3:最大化 }
  ShellLink.GetHotkey(LnkInfo.HotKey);                                          { 获取快捷方式快捷键 }
  ShellLink  := nil;
  ShellPFile := nil;
end;

{ 注:
  发现没有,获取都是用 ShellLink.Get...,
  所以,创建,就是ShellLink.Set...了,自己动手写写了。
  这里就不罗嗦了。
}

end.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值