Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как создать ярлык [D7, Win2k]


Antoshka ©   (2006-04-14 19:11:00) 

Господа, поможите! Хочу создать ярлык. Делаю так, как  FAQ написано:

uses ShlObj, ComObj, ActiveX;

procedure CreateLink(const PathObj, PathLink, Desc, Param: string);
 var
   IObject: IUnknown;
   SLink: IShellLink;
   PFile: IPersistFile;
 begin
   //Компилятор ругается так: Incompatable types: ‘IUnknown’ and ‘IInterface’      
   IObject := CreateComObject(CLSID_ShellLink);
   SLink := IObject as IShellLink;
   PFile := IObject as IPersistFile;
   with SLink do begin
     SetArguments(PChar(Param));
     SetDescription(PChar(Desc));
     SetPath(PChar(PathObj));
   end;
   PFile.Save(PWChar(WideString(PathLink)), FALSE);
 end;


В чём дело? Подскажите, кто может.


kernel   (2006-04-15 17:46:00) [1]

Так, как FAQ написано - все работает. Я сам этой функцией пользовался часто и всегда эффект был (по крайней мере у меня) положительным. Смотри ошибки в другом месте...


Antoshka   (2006-04-14 21:24:00) [2]

Хм, спасибо, конечно… Но проблема в том, что компилятор на первой же строчке ругается.
CreateComObject(CLSID_ShellLink) каким то боком возвращает Iinterface!
Приведением типов я ничего хорошего не добился. Может быть это как-то по другому можно сделать?


PZ   (2006-04-14 20:36:00) [3]

Я использовал процедуру (не помню откуда позаимствовал):
procedure TForm1.SetIcon();
Var
 MyObject  : IUnknown;
 MySLink   : IShellLink;
 MyPFile   : IPersistFile;
 Directory : String;
 WFileName : WideString;
 MyReg     : TRegIniFile;
begin
 MyObject := CreateComObject(CLSID_ShellLink);
 MySLink := MyObject as IShellLink;
 MyPFile := MyObject as IPersistFile;
 With MySLink do
 begin
   SetPath(PChar(FileName));
   SetDescription(PChar(Description));
   SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
 end;
 MyReg := TRegIniFile.Create(
          'Software\MicroSoft\Windows\CurrentVersion\Explorer');

// Используйте следующую строчку кода для создания ярлыка
//   на рабочем столе

 Directory := MyReg.ReadString('Shell Folders','Desktop','');

// Используйте следующие три строчки для создания ярлыка
//    в главном меню
//  Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
//      '\Рулез!';
//  CreateDir(Directory);

 WFileName := Directory+'\View_BD.lnk';
 MyPFile.Save(PWChar(WFileName),False);
 MyReg.Free;
end;      { TForm1.SetIcon }


Palladin   (2006-04-14 19:44:00) [4]

:) Ну кто откуда может знать зачем же ты делаешь как в FAQ написано


Наверх

Титульная страница Поиск, карта сайта Написать письмо