type
MyLINK_FILE_INFO = record
TargetFileName : 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..CCH_MAXNAME] of char; //快捷方式的描述
//ItemIDList:PItemIDList; //只供读取使用
//RelativePath:array[0..255] of char; //相对目录,只能设置
//ShowState:integer; //运行时的窗口状态
//HotKey:word; //快捷键
end;
function GetShortcutTarget(const LinkFileName : String; var My_LINK_FILE_INFO : MyLINK_FILE_INFO) : Boolean; //获得快捷方式指向的目标
var
ShellLink : IShellLink;
Buffer: PWideChar;
Win32FindData: WIN32_FIND_DATA;
HResu: HResult;
PersistFile: IPersistFile;
begin
Result:=False;
GetMem(Buffer, MAX_PATH);
if not Succeeded(CoInitialize(nil)) then Exit;
if not Succeeded(coCreateInstance(CLSID_SHELLLINK, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, ShellLink)) then Exit;
HResu := ShellLink.QueryInterface(iPersistFile, PersistFile);
if not Succeeded(HResu) then Exit;
HResu := PersistFile.Load(StringToWideChar(LinkFileName, Buffer, MAX_PATH), STGM_READ);
if not Succeeded(HResu) then Exit;
HResu := ShellLink.Resolve(0, SLR_NO_UI);
//if Succeeded(HResu)
//psl.Resolve(Form_GameMenuSet.Handle, SLR_ANY_MATCH); // 按照一定的搜索规则试图获得目标对象,即使目标对象已经被删除或移动,重命名
with My_LINK_FILE_INFO, ShellLink do
begin
GetPath(TargetFileName, MAX_PATH, Win32FindData, SLGP_UNCPRIORITY);
HResu:=GetIconLocation(IconLocation, MAX_PATH, IconIndex);
// 当指向的路径(TargetFileName) 有空格时, 这里为空!!!!
//if not Succeeded(HResu) then
GetArguments(Arguments, MAX_PATH);
end;
FreeMem(Buffer);
Result:=True;
end;
[课程]FART 脱壳王!加量不加价!FART作者讲授!