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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |