![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте.
Делаю программку, с помощью которой можно будет настраивать свойство ярлыка. В программе я указываю путь к exe файлу, который мне придется дублировать(кинуть на раб. стол) и изменить его свойства. Всё это я уже сделал. Мне осталось лишь научить программу менять иконку ярлыка. Вытащить иконку с любого ярлыка я могу, но вот вставить в свой(дублированный ярлык) не могу. Прошу помощи. Хочу привести код, с которым я редактирую свойства ярлыка. Код:
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.sButton2Click(Sender: TObject);
var
WorkTable:String;
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;
if FileExists(WorkTable+'\'+ExtractFileName(Application.ExeName)) then
DeleteFile(WorkTable+'\'+ExtractFileName(Application.ExeName));
CreateShotCut(sEdit1.Text, WorkTable+'\'+ExtractFileName(sEdit2.Text), sEdit3.Text);
end;
procedure TForm1.sButton1Click(Sender: TObject);
begin
if sopendialog1.Execute then
S:=sOpenDialog1.FileName;
sedit1.Text:=S;
sButton2.Enabled:=True;
end;Каким образом я могу изменить иконку создаваемого ярлыка ? По стандарту иконка остается от оригинала. Спасибо. |
|
#2
|
||||
|
||||
|
Цитата:
Код:
uses
ShlObj, ComObj, ActiveX;
procedure TForm1.Button1Click(Sender: TObject);
var
IObject: IUnknown;
SLink: IShellLink;
ShellFile: IPersistFile;
begin
IObject:= CreateComObject(CLSID_ShellLink);
SLink:= IObject as IShellLink;
ShellFile:= IObject as IPersistFile;
ShellFile.Load('Some.lnk', 0);
SLink.SetIconLocation('C:\Documents and Settings\icn\icon9.ico', 0);
ShellFile.Save(PWChar(WideString('Some.lnk')), false);
end; |
|
#3
|
|||
|
|||
Не могли бы вы прокомментировать последние 3 строки ?Пожалуйста. |
|
#4
|
|||
|
|||
|
Цитата:
Код:
ShellFile.Load('Some.lnk', 0); // это мой ярлык который я создал?
SLink.SetIconLocation('C:\Documents and Settings\icn\icon9.ico', 0); // это иконка на которую меняется ярлык ?
ShellFile.Save(PWChar(WideString('Some.lnk')), false);
end; |
|
#5
|
||||
|
||||
|
Да посмотрите свойства IShellLink, ими можно даже стрелку изменять показывающую что это - ярлык
![]() |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Gareth (23.10.2014)
| ||