uses shlobj, ActiveX, ComObj, ShellAPI;function ExeFromLink(const linkname: WideString): string;
var
link: IShellLink;
storage: IPersistFile;
filedata: TWin32FindData;
buf: array[0..MAX_PATH] of Char;
widepath: WideString;
begin
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER,
IShellLink, link));
OleCheck(link.QueryInterface(IPersistFile, storage));
widepath := linkname;
Result := '';
if Succeeded(storage.Load(@widepath[1], STGM_READ)) then
if Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) then
if Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY))
then
Result := buf;
storage := nil;
link := nil;
end;procedure TForm1.btn1Click(Sender: TObject);
var
s: string;
begin
s := ExeFromLink('d:\记事本.lnk');
if s <> '' then
begin
ShellExecute(Handle, 'open', PChar(s), '', '', SW_SHOWNORMAL);
end
else
ShowMessage('快捷方式指向的路径无效');
end;
var
link: IShellLink;
storage: IPersistFile;
filedata: TWin32FindData;
buf: array[0..MAX_PATH] of Char;
widepath: WideString;
begin
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER,
IShellLink, link));
OleCheck(link.QueryInterface(IPersistFile, storage));
widepath := linkname;
Result := '';
if Succeeded(storage.Load(@widepath[1], STGM_READ)) then
if Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) then
if Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY))
then
Result := buf;
storage := nil;
link := nil;
end;procedure TForm1.btn1Click(Sender: TObject);
var
s: string;
begin
s := ExeFromLink('d:\记事本.lnk');
if s <> '' then
begin
ShellExecute(Handle, 'open', PChar(s), '', '', SW_SHOWNORMAL);
end
else
ShowMessage('快捷方式指向的路径无效');
end;
运行那个 快捷方式的 记事本.lnk 是可以的,但是运行其他的就不行了呀
比方说: 我建立一个IE的快捷方式是直接打开 百度网站 ,参数设置如下:这个快捷方式也放在D盘下
我修改后的代码如下,可是不能执行这个快捷方式,打开的还是 默认网站的???
procedure TForm1.btn1Click(Sender: TObject);
var
s: string;
begin
s := ExeFromLink('d:\Internet Explorer.lnk');
if s <> '' then
begin
ShellExecute(Handle, 'open', PChar(s), '', '', SW_SHOWNORMAL);
end
else
ShowMessage('快捷方式指向的路径无效');
end;
这个s就是快捷方式的“目标”中的全部字符串,
而 IEXPLORE.EXE" HTTP://WWW.BAIDU.COM/ 中间有个 " 分隔,前段是exe,后面是参数
你分割处理下这个 S 字符串不就得了
link.GetArguments 这个函数就是返回快捷方式的参数,也就是那个网址
type
ShellLinkData = record
path: array[1..MAX_PATH] of Char; // 路径
arguments: array[1..MAX_PATH] of char; // 参数
// 更多自己加
end;uses shlobj, ActiveX, ComObj, ShellAPI;procedure ExeFromLink(const linkName: WideString; var sld: ShellLinkData);
var
link: IShellLink;
storage: IPersistFile;
fileData: TWin32FindData;
widePath: WideString;
begin
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER,
IShellLink, link));
OleCheck(link.QueryInterface(IPersistFile, storage));
widePath := linkName; if Succeeded(storage.Load(@widepath[1], STGM_READ)) then
if Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) then
begin
link.GetPath(@sld.path, MAX_PATH, fileData, SLGP_UNCPRIORITY);
link.GetArguments(@sld.arguments, MAX_PATH);
end; storage := nil;
link := nil;
end;procedure TForm1.btn1Click(Sender: TObject);
var
linkData: ShellLinkData;
begin
ExeFromLink('d:\Internet Explorer.lnk', linkData);
ShellExecute(Handle, 'open', @linkData.path, @linkData.arguments, '',
SW_SHOWNORMAL);
end;