» О ярлыках Borland Delphi. windows. . Блог программистов


Блог программистов




20072 Мар

О ярлыках

Основа создания ярлыка является следующие:
В раздел Uses необходимо добавить следующие модули ShlObj, ActiveX, ComObj, StdCtrls;
private
procedure CreateShotCut(SourceFile, ShortCutName, SourceParams: String);
public
{ Public declarations }
end;

implementation

procedure TForm1.CreateShotCut(SourceFile, ShortCutName, SourceParams: String);
var
IUnk: IUnknown;
ShellLink: IShellLink;
ShellFile: IPersistFile;
tmpShortCutName: string;
WideStr: WideString;
i: Integer;
begin
IUnk := CreateComObject(CLSID_ShellLink);
ShellLink := IUnk as IShellLink;
ShellFile := IUnk as IPersistFile;

ShellLink.SetPath(PChar(SourceFile));
ShellLink.SetArguments(PChar(SourceParams));
ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(SourceFile)));

ShortCutName := ChangeFileExt(ShortCutName,’.lnk’);
if fileexists(ShortCutName) then
begin
ShortCutName := copy(ShortCutName,1,length(ShortCutName)-4);
i := 1;
repeat
tmpShortCutName := ShortCutName +'(‘ + inttostr(i)+ ‘).lnk’;
inc(i);
until not fileexists(tmpShortCutName);
WideStr := tmpShortCutName;
end
else
WideStr := ShortCutName;
ShellFile.Save(PWChar(WideStr),False);
end;

Например, для создания ярлыка в автозагрузки надо:

procedure TForm1.Button1Click(Sender: TObject);
var
WorkTable:String;
Find:_WIN32_FIND_DATAA;
P:PItemIDList;
C:array [0..1000] of char;
begin
if SHGetSpecialFolderLocation(Handle,CSIDL_PROGRAMS,p)=NOERROR then
begin
SHGetPathFromIDList(P,C);
WorkTable:=StrPas(C)+’\Автозагрузка’;
end;

if not DirectoryExists(WorkTable) then
MkDir(WorkTable);
// создание ярлыка с помощью вышеприведенной процедуры
CreateShotCut(‘Путь_к_программе\Программа.exe’, WorkTable+’\’+ExtractFileName(‘Путь_к_программе\Программа.exe’), »);
end;

Или для создания ярлыка на Рабочем столе:

procedure TForm1.Button2Click(Sender: TObject);
var
WorkTable:String;
Find:_WIN32_FIND_DATAA;
P:PItemIDList;
C:array [0..1000] of char;
begin
if SHGetSpecialFolderLocation(Handle,CSIDL_DESKTOP,p)=NOERROR then
begin
SHGetPathFromIDList(P,C);
WorkTable:=StrPas(C);
end;
CreateShotCut(‘Путь_к_программе\Программа.exe’, WorkTable+’\’+ExtractFileName(‘Путь_к_программе\Программа.exe’), »);
end;

Кстати если вы хотите сделать ярлык данной программы то вместо ‘Путь_к_программе\Программа.exe’ напишите Application.ExeName

Комментарии запрещены