Poniżej masz kod, który tworzy skrót do danego pliku na Pulpicie. Używałem go to stworzenia skrotu
dla gry "Książę i Rchórz" po zakończeniu rozpakowywania z rara całej przygotowanej przeze mnie
wersji gry. Aplikacja jest konsolowa bez okna konsoli (komentarz z GUI) i wybacz mi tutaj braki
formatowania kodu, ale wszystko poza funkcją wykonuje się po kolei, możesz wywalić zbędne
rzeczy z kodu. Na przykład w aplikacji okienkowej zamiast Handle użyj Applicaton.Handle.
program kit_setup;
{$APPTYPE GUI}
uses
Windows, SysUtils, ShlObj, ActiveX, ComObj, Registry;
function IsSlashChar(Path: string): string;
begin
if Path[Length(Path)] <> '\' then
begin
Result := Path + '\'
end
else
begin
Result := Path;
end;
end;
var
V : OSVERSIONINFO;
Desktop : PChar;
SL : IShellLink;
PF : IPersistFile;
Lnk : WideString;
AppPath, ExePath, WorkDir, IconName : string;
wndClass : array[0..50] of Char;
handle : Thandle;
MyReg : TRegIniFile;
begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
Handle := FindWindow(@wndClass[0], nil);
MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
Desktop := PChar(MyReg.ReadString('Shell Folders', 'Desktop', ''));
MyReg.Free;
GetMem(Desktop, MAX_PATH + 1);
V.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
GetVersionEx(V);
case V.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS:
begin
SHGetSpecialFolderPath(Handle, Desktop, CSIDL_DESKTOPDIRECTORY, True);
end;
VER_PLATFORM_WIN32_NT:
begin
SHGetSpecialFolderPath(Handle, Desktop, CSIDL_COMMON_DESKTOPDIRECTORY, True);
end;
end;
CoInitialize(nil);
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL));
PF := SL as IPersistFile;
AppPath := IsSlashChar(ExtractFilePath(ParamStr(0)));
ExePath := AppPath + 'kit_loader.exe';
OleCheck(SL.SetPath(PChar(ExePath)));
WorkDir := AppPath;
OleCheck(SL.SetWorkingDirectory(PChar(WorkDir)));
IconName := AppPath + 'kit_loader.exe';
OleCheck(SL.SetIconLocation(PChar(IconName), 0));
Lnk := IsSlashChar(Desktop) + 'Książę i Tchórz' + '.lnk';
PF.Save(PWideChar(Lnk), True);
CoUninitialize;
FreeMem(Desktop);
end.
Zressztą sposobów na tworzenie skrótu jest wiele, wystarczy wygooglować by uzyskać przykłady.