Alguns dias atrás, a pedido do cliente, eu realmente usei VB e VC para escrever essa coisa mais rapidamente, mas ainda gosto de usar Delphi
Primeiro de tudo, use ActiveX, COMOBJ, stdctrls, shlobj, filetrl;
Crie um atalho para o aplicativo atual na pasta especificada
Procedimento TForm1.Makelink (Nome do Foldern: String ; Pronome, lnkname, Descrição: String );
var
Workdir, DestName: String ;
AOBJ: Iunknown;
MyLink: Ishelllink;
MyPFile: iPersistFile;
Wfilename: wideestring;
Curdir: Array [0..100] de Char;
Começar
DestName: = FolderName + lnkne;
AOBJ: = CreateComObject (clsid_shelllink);
Mylink: = aobj como ishelllink;
MypFile: = AOBJ como iPersistFile;
GetCurrentDirectory (sizeof (curdir), curdir);
Workdir: = Curdir;
prongame: = TRIM (workdir)+'/'+pronome;
com mylink fazer
Começar
SetShowcmd (sw_normal);
Settarguds ('');
SetDescription (PChar (Descrição));
SetPath (PChar (proname));
SetWorkingDirectory (PCHO (Workdir));
fim;
CreatedIr (ExtractFilePath (DestName));
Wfilename: = DestName;
Mypfile.save (pwchar (wfilename), false);
fim;
// Obtenha o caminho para o grupo inicial de start-> program->
function tform1.getSpecialFolder: String; // Obtenha Starup Floder
var
Pidl: pitemidlist;
Alça: THANDLE;
Comp: tComponent;
Linkdir: string ;
Começar
resultado: = '';
Comp: = self; // self.owner;
identificador: = (Comp como tform) .Handle;
Se obtido (ShgetSpecialFolderLocation (Handle, CSIDL_Common_Startup, Pidl)) então // outros caminhos especiais também podem ser usados CSIDL_Common ou, basta verificar em Delphi
Começar
SetLength (linkdir, max_path);
ShgetPathFromidlist (PIDL, PCHA (LinkDir));
SetLength (linkdir, strlen (pchar (linkdir)));
Resultado: = linkdir+'/';
fim;
fim;
// Alguns dos emprestados de conteúdo do conteúdo de Monopoly BBS