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:\folder\exeFile.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;
위의 코드는 델파이의 오류가 많이 발생하고 두 번 실행할 수 없습니다 ...Windows에서 바탕 화면에 파일 바로 가기 (* .lnk 파일)를 만드는 방법은 무엇입니까?
어떤 아이디어가?
btw. 근원은 원래 광산이 아니고, 웹상의 장소에서 집어 들었다.
문제가 아니라하지만 배열해야 0..MAX_PATH-1 내가이 추가 될 때까지 ... 그것은 작동하지 않는 당신이 PWideChar로로 고통을 캐스팅하여 실수를 생각 –