Страница 1 из 2

Иконки сетевых ресурсов

Добавлено: 11 май 2004, 15:10
Romeo
Доброго времени суток, господа. У меня здесь возникла проблема с получением иконок сетевых ресурсов. Короче я спокойно получаю IShellFolder объект некого айтема в сетевых ресурсах, но, как выясняется, если этот объект является одним из так называемых "recent" сетевых ресурсов, то он не поодерживает методы интерфейса IExtractIcon (проще говоря QueryInterface с соответствующими параметрами возвращает E_NOINTERFACE).

Вопрос: как IE или тот же WinCmd (TotalCmd) получают иконки этих ресурсов, если даже более тяжеловесная шеловская функция SHGetInfo не может ничего сделать.

P.S. Если нужна дополнительная информация по вопросу - я к вашим услугам.

P.P.S. Если не ошибаюсь, господа Andy и Aik занимались подобными исследованиями. Надеюсь в первую очередь именно на вас.

Добавлено: 11 май 2004, 15:49
AiK
Romeo, я так эту кухню и доконца и не заборол. В некоторых случаях, на сколько я понимаю, ты должен использовать интерфейс IShellIcon.
P.S: что есть recent сетевой ресурс я так и не понял.

Добавлено: 11 май 2004, 15:59
Romeo
Этим термином я назвал новуй папку, которая появляется в сетевом окружении, когда пользователь зашёл на некий ресурс в локальной сети. Этот механизм был разработан Биллом для того, чтобы якобы ускорить навигацтю по сети. На счёт IShellIcon, спасибо, сейчас изучу... однако вопрос всё равно остаётся открытым.

Добавлено: 11 май 2004, 16:15
Andy
как IE
IE юзает IExtractIcon.

Почему у тебя не работает - может баги в коде?

Можно еще попробовать так:

Код: Выделить всё

SHGetFileInfo((LPCTSTR)pidl,0,&sfi,sizeof(SHFILEINFO),
    SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_LINKOVERLAY)
Индекс иконки возвращается в sfi.iIcon

Добавлено: 11 май 2004, 16:42
Romeo
Короче исследования по направлению IShellIcon завершены. Фунциональности у интерфейса меньше, чем у IExtractIcon. А вот насчёт линков - это хорошее замечание. Сейчас почетаем-с что об этом думает MSDN. :)

Добавлено: 17 май 2004, 16:31
Romeo
Всё, господа, проблема решена. Собака порылась именно в линках! На помощь пришёл COM Interface IShellLink. Кому будет интересно, могу рассказать подробнее, обращайтесь.

P.S. Функцией SHGetFileInfo не пользовался из принципа. Тестирования скорости, проведённые намного раньше возникшей проблемы, показали, что, обладая довольно приличной функциональностью, функция SHGetFileInfo на мелких задачах тупит неимоверно! Пользоваться ею лишь для того, чтобы получить иконку - это всё равно, что забивать в сапоги гвозди отбойным молотком :)

Добавлено: 17 май 2004, 18:16
Andy
функция SHGetFileInfo на мелких задачах тупит неимоверно
Romeo, не перегибай палку. SHGetFileInfo конечно работает немного медленно (что вобщем общеизвестно), но фраза тупит наимоверно это черезчур!

Добавлено: 17 май 2004, 20:14
Romeo
Всё познаётся в сравнении, господин Andy :)

Добавлено: 17 май 2004, 20:16
Romeo
В три раза медленее, это "немного"? :)

Добавлено: 17 май 2004, 20:45
Andy
Romeo, ну тебе же как я понимаю не тысячу иконок за секунду надо вытащить? :) Ладно, хватит нам флеймить =) Итоги: SHGetFileInfo работает медленно, поэтому надо написать в Microsoft, чтобы в Windows Longhorn эту функцию из shell32.dll убрали %))