从一个 LNK (快捷方式)取得该快捷方式的指向 EXE(可执行档)?

原创 2004年10月25日 21:47:00

    这段时间,老被一个问题困扰,动态创建Button控件,然后从*.LNK档案取得该*.EXE档案,进而得到该EXE档案的图标,最后就是把取得的图标一一对应显示在动态创建的Button上面;
    刚开始的时候,天真的认为,系统会自动的从*.LNK档案取得EXE路径的,但是现实告诉我,这样不行!只好从*.LNK档案上动手脚了,如下:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses activex,comobj,shlobj;
{$R *.dfm}

function ResolveLink(const ALinkFile: String): 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 := ALinkFile;
  Result := 'unable to resolve link';
  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.Button1Click(Sender: TObject);
begin
  ShowMessage(ResolveLink('C:/delphi 7.lnk'));
end;

//引用方法很简单啊!ResolveLink()返回一个 String , 正是我需要的 Type :-);

end.

通过LNK文件(快捷方式)解析出目标文件的路径

尼玛的~网上找了一堆资料都是有问题的代码,各种转发,错的东西传来传去,误人子弟!!! 自己重写了个,加上注释,留着备用 引用头: #include  关键引用的类IShellLink:...
  • yoie01
  • yoie01
  • 2013年03月18日 19:53
  • 2280

VB6获取快捷方式lnk文件的指向绝对路径

就是直接艹lnk的文件结构罢了。 Private Declare Sub GetMem2 Lib "msvbvm60" (ByVal Ptr As Long, RetVal As Integer) ...
  • a1875566250
  • a1875566250
  • 2012年08月03日 00:45
  • 1980

ubuntu下的快捷方式

ubuntu下快捷方式在Ubuntu Kylin下,软件快捷方式在/usr/share/applications ,软件通过*.desktop的形式(类freedesktop.org-complia...
  • Cceking
  • Cceking
  • 2016年06月19日 18:18
  • 693

C#如何获取快捷方式指向的目标文件

原文地址:http://www.cnblogs.com/DoNetCShap/p/4221854.html 前几天,做个小程序时遇到的问题,在百度上搜索了很久,没有发现好的解决方案,...
  • qq798833488
  • qq798833488
  • 2016年09月12日 13:50
  • 1873

从快捷方式中读取目标路径(收藏)

http://support.microsoft.com/kb/130698/从快捷方式中读取目标路径
  • jiangsheng
  • jiangsheng
  • 2001年08月02日 22:31
  • 1457

桌面快捷方式变.lnk的恢复办法

问题说明:本来想将一个.vbs文件改成先打开google chrome,但是一不小心文件夹下的所有快捷方式全变成了.lnk。 问题思路一:网上先找到了第一种方法(由于注册表下未找到所提的文件,故没敢...
  • qianggezaici
  • qianggezaici
  • 2016年11月15日 11:26
  • 1241

bat脚本实现应用程序的快捷方式建立

废话不多了、直接上原脚本: @echo off set shortCutPath=D:\Program Files set shortCutName=you_dao set Start...
  • u013923131
  • u013923131
  • 2014年09月25日 16:12
  • 3425

[转]命令行创建快捷方式的批处理脚本

命令行创建快捷方式的批处理脚本 from: http://www.360doc.com/content/10/0803/09/2522536_43303185.shtml...
  • tan_jianhui
  • tan_jianhui
  • 2010年10月27日 15:54
  • 5418

【转】 快捷方式lnk文件格式详解(英文)(中文)

【转】 快捷方式lnk文件格式详解(英文)(中文)2009-11-07 10:55转自:http://www.stdlib.com/art6-Shortcut-File-Format-lnk.html...
  • ked
  • ked
  • 2010年04月05日 00:37
  • 2007

WINDOWS快捷方式(*.lnk文件)打开方式关联错误的解决方法

http://www.cnblogs.com/chinhr/archive/2009/04/23/1442212.html 相信有些用户曾试过错误地把LNK文件的打开方式更改其他文件,导致系统所有的...
  • vanseparis
  • vanseparis
  • 2016年03月02日 11:51
  • 764
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从一个 LNK (快捷方式)取得该快捷方式的指向 EXE(可执行档)?
举报原因:
原因补充:

(最多只允许输入30个字)