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

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

Файлы ярлыков (*.lnk) [D7, XP]


AlexanderMS ©   (2006-08-02 16:30:00) 

Скажите, пожалуйста, есть ли какие-либо компоненты, позволяющие прочитать содержимое файлов-ярлыков? То есть нужно получить полный путь файла, параметры, иконку и т. п. Может, есть примеры или статьи на эту тему?


AlexanderMS   (2006-08-04 16:09:00) [1]

Почти получилось.
Но столкнулся с проблемой получения пути к иконке ярлыка.
Видно, проблема здесь:

var
SL: IShellLink;
PF: IPersistFile;
AStr: array[0..MAX_PATH] of char;
...

OleCheck(SL.GetIconLocation(AStr, MAX_PATH, IconIndex));
IconLocation := AStr;

...

IconLocation равно ''. Смотрю AStr. Первый элемент массива равен #0, а остальное, вроде бы, - реальный путь к иконке. На первом месте должен быть диск D, а там - #0. При этом если иконка стандартная (например, содержится в Shell32.dll), то IconLocation
содержит путь иконки, и всё ОК.

Это уже исходный код второго компонента. В первом была та же проблема.


AlexanderMS   (2006-08-03 18:27:00) [2]

Большое спасибо. Сейчас попробую.


Zeqfreed   (2006-08-03 17:42:00) [3]

> [9] AlexanderMS ©   (03.08.06 16:50)

Думаю здесь подойдет просто ExtractIcon:

procedure TForm1.Button1Click(Sender: TObject);
var
 Icon : hIcon;
 ListIcon : TIcon;
 len, Idx : Cardinal;
 Src, Path : PChar;
begin
 Src := '%WINDIR%\System32\calc.exe';

 GetMem(Path, 255);
 try
  len := ExpandEnvironmentStrings(Src, Path, 255);
  if (len = 0) then Exit;

  Idx := 0;
  Icon := ExtractIcon(hInstance, Path, Idx);
  if (Icon <> 0) then begin
   ListIcon := TIcon.Create;
   try
    ListIcon.Handle := Icon;
    ImageList1.AddIcon(ListIcon);
    ImageList1.Draw(Canvas, 0, 0, 0);
   finally
   ListIcon.Free;
   end;
  end;
 finally
  FreeMem(Path);
 end;
end;


AlexanderMS   (2006-08-03 16:50:00) [4]

> ExtractAssociatedIcon?

Как использовать, покажите, пожалуйста. Мне нужно "занести" эту иконку в ImageList, с тем чтобы потом использовать её как картинку размером 16x16 у кнопки на ToolBar. Если можно, примерчик.


Zeqfreed   (2006-08-02 19:23:00) [5]

ExtractAssociatedIcon?


AlexanderMS   (2006-08-02 19:06:00) [6]

Большое спасибо! Нашёл подходящий компонент. Остался вопрос:
Как загрузить иконку в ImageList, если дан путь к файлу, содержащему эту иконку, и известен её ID?


Zeqfreed   (2006-08-02 17:10:00) [7]

> [5] AlexanderMS ©   (02.08.06 17:03)

А без компонентов-то никак чтоли в наше трудное время? :)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int_programming/shortcuts/shortcut.asp

http://www.torry.net/pages.php?id=515— TASLink Creator v.1.6

http://www.google.com/search?hs=d1F&hl=ru&client=opera&rls=en&q=IShellLink+%2BDelphi&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=


AlexanderMS   (2006-08-02 17:03:00) [8]


> IShellLink

А модуль?
Скорректирую вопрос: где достать компоненты для работы с файлами ярлыков?


Ketmar   (2006-08-02 16:51:00) [9]

> [2] AlexanderMS ©   (02.08.06 16:46)

точно по вопросу. никто не спрашивал, где и как; интересовал сам факт наличия. я факт подтвердил.


Zeqfreed   (2006-08-02 16:48:00) [10]

IShellLink

Steve Teixeira and Xavier Pacheco: Delphi 6 Developer's Guide
Глава 16, часть 4.


AlexanderMS   (2006-08-02 16:46:00) [11]


> есть.

Ответ - со скоростью света, но малосодержательный. :)


Ketmar   (2006-08-02 16:43:00) [12]

есть.


Наверх

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