加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何在Windows桌面上创建文件快捷方式(* .lnk文件)?

发布时间:2020-12-15 04:01:44 所属栏目:大数据 来源:网络整理
导读:function GetDesktopFolder: string;var buf: array[0..MAX_PATH] of Char; pidList: PItemIDList;begin Result := StrNoDesktopFolderFo; SHGetSpecialFolderLocation(Application.Handle,CSIDL_DESKTOP,pidList); if (pidList nil) then if (SHGetPathFrom
function GetDesktopFolder: string;
var
  buf: array[0..MAX_PATH] of Char;
  pidList: PItemIDList;
begin
  Result := StrNoDesktopFolderFo;
  SHGetSpecialFolderLocation(Application.Handle,CSIDL_DESKTOP,pidList);
  if (pidList <> nil) then
    if (SHGetPathFromIDList(pidList,buf)) then
      Result := buf;
end;

procedure p;
var
  i: Integer;
  IObject: IUnknown;
  ISLink: IShellLink;
  IPFile: IPersistFile;
  PIDL: PItemIDList;
  InFolder: array[0..MAX_PATH] of Char;
  TargetName: string;
  LinkName: string;
begin
  TargetName := 'c:folderexeFile.exe';//hardcoded example

  IObject := CreateComObject(CLSID_ShellLink) ;
  ISLink := IObject as IShellLink;
  IPFile := IObject as IPersistFile;

  with ISLink do
  begin
    SetDescription('what ever');
    SetPath(pChar(TargetName)) ;
    SetWorkingDirectory(pChar(ExtractFilePath(TargetName))) ;
  end;

  SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL) ;
  SHGetPathFromIDList(PIDL,InFolder) ;

  LinkName := getDesktopFolder+'';
  i := ;

  LinkName:= linkname+ExtractFileName(TargetName)+'.lnk';

  if LinkName = StrNoDesktopFolderFo then
    Exit;
  if not FileExists(LinkName) then
    IPFile.Save(PWChar(LinkName),False);

  Application.Terminate;
end;

上面的代码在Delphi中导致很多错误,不能运行两次……

有任何想法吗 ?

顺便说一句.来源不是我的,它是从网上的地方拿起来的.

解决方法

我会这样做,例如这条路
uses
  ShlObj,ComObj,ActiveX;

function GetDesktopFolder: string;
var
  PIDList: PItemIDList;
  Buffer: array [0..MAX_PATH-1] of Char;
begin
  Result := '';
  SHGetSpecialFolderLocation(Application.Handle,PIDList);
  if Assigned(PIDList) then
    if SHGetPathFromIDList(PIDList,Buffer) then
      Result := Buffer;
end;

function CreateDesktopShellLink(const TargetName: string): Boolean;
var
  IObject: IUnknown;
  ISLink: IShellLink;
  IPFile: IPersistFile;
  PIDL: PItemIDList;
  LinkName: string;
  InFolder: array [0..MAX_PATH-1] of Char;
begin
  Result := False;

  IObject := CreateComObject(CLSID_ShellLink);
  ISLink := IObject as IShellLink;
  IPFile := IObject as IPersistFile;

  with ISLink do
  begin
    SetDescription('Description ...');
    SetPath(PChar(TargetName));
    SetWorkingDirectory(PChar(ExtractFilePath(TargetName)));
  end;

  SHGetSpecialFolderLocation(0,PIDL);
  SHGetPathFromIDList(PIDL,InFolder) ;

  LinkName := IncludeTrailingBackslash(GetDesktopFolder);
  LinkName := LinkName + ExtractFileName(TargetName) + '.lnk';

  if not FileExists(LinkName) then
    if IPFile.Save(PWideChar(LinkName),False) = S_OK then
      Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CreateDesktopShellLink('C:FolderExeFile.exe') then
    ShowMessage('Link has been created ...');
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读