首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

问个基础有关问题DELPHI执行外部程序的快捷方式LNK?

2013-12-19 
问个基础问题DELPHI执行外部程序的快捷方式LNK??问个基础问题DELPHI执行外部程序的快捷方式LNK??声明我在D

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

热点排行