怎样创建快捷方式?

chinayjlljy 2003-02-12 04:46:15
怎样用程序实现创建快捷方式?
...全文
115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
quark 2003-02-12
  • 打赏
  • 举报
回复
type TLinkFile = record //快捷方式文件信息数据结构
FileName: array[0..MAX_PATH] of char; //目标文件名
WorkDirectory: array[0..MAX_PATH] of char; //工作目录
IconLocation: array[0..MAX_PATH] of char; //图标文件
IconIndex: integer; //图标索引
Arguments: array[0..MAX_PATH] of char; //运行参数
Description: array[0..255] of char; //文件描述
ItemIDList: PItemIDList; //系统IDList,未使用
RelativePath: array[0..255] of char; //相对路径
ShowState: integer; //运行时的现实状态
HotKey: word; //热键
end;


//==============================================================================
//创建一个快捷方式**************************************************************
//==============================================================================
function LinkFileCreate(const LinkFile: TLinkFile; const TargetLinkFileName: string=''): boolean;
var PersistFile: IPersistFile;
ShellLink: IShellLink;
wFileName: WideString;
OBJ: IUnknown;
begin
wFileName := TargetLinkFileName;
OBJ := CreateComObject(CLSID_SHELLLINK);
ShellLink := OBJ as IShellLink;
PersistFile := OBJ as IPersistFile;
ShellLink.SetPath(LinkFile.FileName);
ShellLink.SetWorkingDirectory(LinkFile.WorkDirectory);
ShellLink.SetDescription(LinkFile.Description);
ShellLink.SetArguments(LinkFile.Arguments);
ShellLink.SetIconLocation(LinkFile.IconLocation, LinkFile.IconIndex);
//ShellLink.SetIDList(Info.ItemIDList);
ShellLink.SetHotkey(LinkFile.HotKey);
ShellLink.SetShowCmd(LinkFile.ShowState);
ShellLink.SetRelativePath(LinkFile.RelativePath,0);
if TargetLinkFileName='' then wFileName:=ChangeFileExt(LinkFile.FileName,'lnk');
Result := Succeeded(PersistFile.Save(PWChar(wFileName), false));
end;



//==============================================================================
//获得或设置快捷方式文件******************************************************
//==============================================================================
function LinkFileInfo(const LinkFileName: string; var LinkFile: TLinkFile; const bSet: boolean=false): boolean;
var Win32FindData: WIN32_FIND_DATA;
PersistFile: IPersistFile;
ShellLink: IShelllink;
Buffer: PWideChar;
HResu: HResult;
begin
Result := false;
GetMem(Buffer, MAX_PATH);
try
if Succeeded(CoInitialize(nil))
then if (Succeeded(coCreateInstance(CLSID_SHELLLINK, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, ShellLink))) then
begin//04
HResu := ShellLink.QueryInterface(iPersistFile, PersistFile);
if Succeeded(HResu) then
begin//03
HResu := PersistFile.Load(StringToWideChar(LinkFileName, Buffer, MAX_PATH), STGM_READ);
if Succeeded(HResu) then
begin//02
HResu := ShellLink.Resolve(0, SLR_NO_UI);
if Succeeded(HResu) then
begin//01
if bSet then
begin
ShellLink.SetArguments(LinkFile.Arguments);
ShellLink.SetDescription(LinkFile.Description);
ShellLink.SetHotkey(LinkFile.HotKey);
ShellLink.SetIconLocation(LinkFile.IconLocation, LinkFile.IconIndex);
ShellLink.SetIDList(LinkFile.ItemIDList);
ShellLink.SetPath(LinkFile.FileName);
ShellLink.SetShowCmd(LinkFile.ShowState);
ShellLink.SetRelativePath(LinkFile.RelativePath, 0);
ShellLink.SetWorkingDirectory(LinkFile.WorkDirectory);
if Succeeded(ShellLink.Resolve(0, SLR_UPDATE)) then Result := true;
end else
begin
ShellLink.GetPath(LinkFile.FileName, MAX_PATH, Win32FindData, SLGP_SHORTPATH );
ShellLink.GetIconLocation(LinkFile.IconLocation, MAX_PATH, LinkFile.IconIndex);
ShellLink.GetWorkingDirectory(LinkFile.WorkDirectory, MAX_PATH);
ShellLink.GetDescription(LinkFile.Description, 255);
ShellLink.GetArguments(LinkFile.Arguments, MAX_PATH);
ShellLink.GetHotkey(LinkFile.HotKey);
ShellLink.GetIDList(LinkFile.ItemIDList);
ShellLink.GetShowCmd(LinkFile.ShowState);
Result:=true;
end;
end;//01
end;//02
end;//03
end;//04
finally//try
FreeMem(Buffer);
end;//endtry
end;

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧