问个基础问题DELPHI执行外部程序的快捷方式LNK??
问个基础问题DELPHI执行外部程序的快捷方式LNK??
声明我在D盘下 建立一个 记事本的快捷方式,想直接执行,方法如下:
//记事本.lnk
ShellExecute(Handle,'open',PChar( 'd:\记事本.lnk' ),'','',SW_SHOWNORMAL);
//或者
winexec(PAnsiChar(''d:\记事本.lnk' ),SW_SHOW);
这两种方法在XP X86下 执行后没有“反应”??
在WIN7 X86系统下是可以执行的
s := ExeFromLink('d:\Internet Explorer.lnk');
这个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;