Несколько дней назад, по просьбе клиента, я фактически использовал VB и VC, чтобы писать эту вещь быстрее, но мне все еще нравится использовать Delphi
Прежде всего, используйте ActiveX, Comobj, Stdctrls, Shlobj, Filectrl;
Создайте ярлык для текущего приложения в указанной папке
Процедура tform1.makelink (foldername: string ; rename, lnkname, description: string );
вар
Workdir, destname: String ;
AOBJ: iunknown;
MyLink: Ishelllink;
Mypfile: ipersistfile;
WfileName: WealString;
curdir: массив [0..100] из Чар;
Начинать
Destname: = foldername + lnkname;
AOBJ: = createComObject (clSID_SHELLLINK);
Mylink: = aobj как ishelllink;
Mypfile: = aobj как ipersistfile;
GetCurrentDirectory (sizeof (curdir), curdir);
Workdir: = curdir;
neame: = trim (workdir)+'/'+neame;
с mylink do
Начинать
SetShowcmd (sw_normal);
Setarguments ('');
SetDescription (pchar (description));
SetPath (pchar (naime));
SetWorkingDirectory (pchar (WorkDir));
конец;
CenectiR (ExtractFilePath (destname));
WFILENAME: = destname;
Mypfile.save (pwchar (wfilename), false);
конец;
// Получить путь к группе старта start-> Program->
Функция tform1.getSpecialFolder: String; // Get StarUp Floder
вар
PIDL: Pitemidlist;
Ручка: Тандл;
Comp: tcomponent;
LinkDir: String ;
Начинать
Результат: = '';
Comp: = self; // self.Owner;
ручка: = (COMP AS TFORM) .HANDLE;
Если добиться успеха (shgetspecialfolderlocation (grade, csidl_common_startup, pidl)), тогда // другие специальные пути также могут использоваться csidl_common или просто проверьте его в Delphi
Начинать
SetLength (linkdir, max_path);
Shgetpathfromidlist (pidl, pchar (linkdir));
SetLength (linkdir, strlen (pchar (linkdir)));
Результат: = linkdir+'/';
конец;
конец;
// Некоторые из контента заимствовываются из монопольного контента BBS