读书人

问个基础有关问题DELPHI执行外部程序的

发布时间: 2013-12-19 00:33:34 作者: rapoo

问个基础问题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;

读书人网 >.NET

热点推荐