Форум: "Основная";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c