Delphi建立文件的快捷方式


本文整理自网络,侵删。

 要建立快捷方式,并不是直接调用哪个API函数,而是要利用CreateComObject(CLSID_ShellLink)建立对象ShellLink。下面就是一段程序,它可以在Win95启动目录下建立快捷方式。如果想知道C++和VB怎么做这一工作,可以参考QA000083 "使用IShellLink来控制快捷方式文件"和QA000154 "用VB创建快捷方式"。 
要使用有关对象,不要忘记在引用单元部分加上ShlObj和ComOb。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, 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

{$R *.DFM}

uses
ShlObj, ActiveX, ComObj, Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
MyObject : IUnknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
FileName : String;
Directory : String;
WFileName : WideString;
MyReg : TRegIniFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
FileName := 'NOTEPAD.EXE';
with MySLink do begin
SetArguments('C:\AUTOEXEC.BAT');
SetPath(PChar(FileName));
SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
end;
MyReg := TRegIniFile.Create(
'Software\MicroSoft\Windows\CurrentVersion\Explorer');

// Use the next line of code to put the shortcut on your desktop
Directory := MyReg.ReadString('Shell Folders','Desktop','');

// Use the next three lines to put the shortcut on your start menu
// Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
// '\Whoa!';
// CreateDir(Directory);

WFileName := Directory+'\FooBar.lnk';
MyPFile.Save(PWChar(WFileName),False);
MyReg.Free;
end;

end.
如果要得到快捷文件的属性,则先应调用IPersistFile对象的Load,然后调用IShellLink的GetPath等函数以获得各种属性(详见Win32 API帮助)。如:
// Load .lnk file
WFileName := ExpandFileName(Sr.Name);
MyPFile.Load(PWChar(WFileName), STGM_DIRECT);

// Retrieve the hotkey.
MySLink.GetHotKey(wHotKey);

// Retrieve the icon.
MySLink.GetIconLocation(Filename, 255, nIndex);
if strLen(Filename) <> 0 then
begin
MyIcon := TIcon.Create;
MyIcon.Handle := ExtractIcon(hInstance, Filename, nIndex);
ListItem.ImageIndex := frmMain.ImageList1.AddIcon(MyIcon);
MyIcon.Free;
end
else
begin
MySLink.GetPath(Filename, 255, fd, SLGP_UNCPRIORITY);
MyIcon := TIcon.Create;
nIndex2 := 0;
MyIcon.Handle := ExtractAssociatedIcon(hInstance, Filename, nIndex2);
ListItem.ImageIndex := frmMain.ImageList1.AddIcon(MyIcon);
MyIcon.Free;
end;
另外,可以在http://delphi.icm.edu.pl/ftp/d30free/PDJ_Shortcut.zip下载免费的建立快捷方式的VCL控件。

相关阅读 >>

Delphi 如何在tmemo,tedit或trichedit中获得插入符的位置

Delphi 检查自己的进程的父进程

Delphi 用正则表达式获取指定的字符串续取出所有符合要求的字符串

Delphi format 另类用法

Delphi 几个实用的html解析函数

Delphi 实现程序放放多个进程条

Delphi html转义

Delphi + word = 数据库 + 公文处理

Delphi 生成日志记录单元

解决 Delphi 程序在不同操作系统中 shellexecute 调用 chrome.exe 偶尔无效的问题

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...