Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.29;
Скачать: CL | DM;

Вниз

IShellLink.GetIconLocation - почему не работает?   Найти похожие ветки 

 
Jel ©   (2004-01-15 11:56) [0]


function TForm1.ExtractIconPath(LnkPath: string): string;
var
IObject: IUnknown;
SLink: IShellLink;
PFile: IPersistFile;
pch : pchar;
fd : WIN32_FIND_DATA;
iconNum : integer;
begin
pch := pchar(StringOfChar(" ", MAX_PATH));
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
PFile := IObject as IPersistFile;
PFile.Load(PWChar(WideString(LnkPath)), STGM_READ);

// SLink.GetPath(pch, MAX_PATH, fd, SLGP_UNCPRIORITY); // Это работает
if SLink.GetIconLocation(pch, MAX_PATH, IconNum) <> 0 then ShowMessage(SysErrorMessage(GetLastError)); // а это всегда возвращает пустую строку и 0

SLink := nil;
PFile := nil;
IObject := nil;

Result := pch + " " + IntToStr(iconNum);
end;



Подскажите плиз, почему так и как сие лечить?


 
Jel ©   (2004-01-15 12:14) [1]

попутно обнаружил, что

SLink.GetDescription(pch, MAX_PATH);

возвращает либо пустую сторку либо строку "Description of shortcut"

Прокоментируйте пожалуйста, ежели кто в курсе.


 
Jel ©   (2004-01-15 14:10) [2]

Up


 
Jel ©   (2004-01-15 16:34) [3]

Я извиняюсь, но опять Up. Неужели никто не пользовался?


 
Dimka Maslov ©   (2004-01-15 16:44) [4]

Если выдаётся пустая строка, значит иконка находится в самом ехешнике, на который ссылается ярлык.


 
Jel ©   (2004-01-15 16:52) [5]

К сожалению не всегда. Например ярлык для любого сервера в сети, будучи созданным тоже отдает пустую строку. При этом иконка на рабочем столе выглядит как компьютер, а добытая как помощью ExtractAssociatedIcon так и с помощью SHFileInfo имеет вид папки. Почему? Как получить иконку, отображаемую в ярлыке?


 
Dimka Maslov ©   (2004-01-15 17:02) [6]

Определять по адресу, что иммешь дело с сервером сети и рисовать иконку из Shell32.dll


 
Jel ©   (2004-01-15 17:05) [7]

А как это делает сама система? Неужели таким же образом?

И есть ли гарантия, что Shell32.dll на любой ОС из линейки Windows под нужным номером содержит одну и ту же иконку?


 
Ломброзо ©   (2004-01-15 17:23) [8]

Дак цель-то какая? Иконку получить?


 
Jel ©   (2004-01-15 17:25) [9]

Имено! Причем не одну а 2 16Х16 и 32Х32, причем именно те, что показывает Explorer.


 
Ломброзо ©   (2004-01-15 17:30) [10]

Ойвэй...

http://delphibase.endimus.com/

ВАм туда. Поиск в разделе "Иконки и ярлычки". Дмитрий Баранов. Покойник прям предчувствовал Ваши пожелания.


 
Jel ©   (2004-01-15 17:39) [11]

Увы - SHGetFileInfo ведет себя и там точно также, как я уже описывал в [5].

Нет ли иных вариантов?


 
Ломброзо ©   (2004-01-15 17:44) [12]

Что Вы такое гойворите? Покойник никогда не ошибался. Я только что проверил. Всё прекрасно работает. В том числе и для серверов локальной сети.


 
Jel ©   (2004-01-15 17:54) [13]

Виноват, дурак, исправлюсь. :)

Напутал с флагами - вместо SHGFI_SYSICONINDEX просил SHGFI_ICON.

Спасибо! Вопрос снят.



Страницы: 1 вся ветка

Текущий архив: 2004.01.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
4-93739
Xtz
2003-11-20 18:16
2004.01.29
Подскажите где взять нормальную инфу по WinApi (win32.hlp рус)


1-93580
_Dmitry_
2004-01-16 11:17
2004.01.29
TWebBrowser


3-93398
Grihan
2003-12-30 12:13
2004.01.29
Как программно создать базу InterBase?


1-93582
Airat Musin
2004-01-16 19:49
2004.01.29
RichEdit


1-93501
Hex0DesiMaL
2004-01-19 08:59
2004.01.29
Скрыть прогу в панли задач