PDA

Просмотр полной версии : Иконки сетевых ресурсов



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

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

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

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

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

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

Andy
11.05.2004, 16:15
как IE
IE юзает IExtractIcon.

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

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


SHGetFileInfo((LPCTSTR)pidl,0,&sfi,sizeof(SHFILEINFO),
SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_LINKOVERLAY)

Индекс иконки возвращается в sfi.iIcon

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

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

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

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

Romeo
17.05.2004, 20:14
Всё познаётся в сравнении, господин Andy :)

Romeo
17.05.2004, 20:16
В три раза медленее, это "немного"? :)

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

Romeo
18.05.2004, 14:26
Понаешь, Andy, вопрос на самом деле принципиальный. Иконок мне нужно извлекать действительно не так уж и много, но зачем пользоваться функцией, которая заведомо медленно решает поставленную задачу? Если забивать на проблему оптимизации приложений в нашем мире суперпроизводительных процессоров, то зачем, скажите на милость господин Andy, на developing.ru по прежнему функционирует ассемблерский форум, у руля которого стоит наш общий знакомый :)

Andy
18.05.2004, 16:21
Romeo, я тебе объясню =) Выигрыша при использовании IExtractIcon немного, но зато SHGetFileInfo очень удобно использовать в кустомных Tree и List-View, так как она возвращает индекс в Shell Image List. И этим многие пользуются, а не только я.


зачем, скажите на милость господин Andy, на developing.ru по прежнему функционирует ассемблерский форум
Ассемблер это не только оптимизация - это если хочешь Искусство %)) К тому же его применения здесь выигрыша не даст. :)

Romeo
18.05.2004, 16:56
Верно, искусство уложнять себе жизнь опускаясь с первого, а то я со второго этажа абстрактного прораммирования в подвалы машинного кода :) Мёртвое искусство (я между прочим тоже очень люблю асм, но, к сожалению, - это правда).

Andy
18.05.2004, 17:18
Мёртвое искусство
<offopic>
А вот это не так. В разделе по ассеблеру, есть ссылки - полазь по ним и убедишься что асм жив! :) А еще лучше скачай IDE RadASM - написано полностью на асме (хотя такое даже на VB сложно написать), использует COM, ActiveX и т.д. Если такое пишут - значит асм всегда будет жить.

ВСЁ, Romeo. Закрываем тему - пошел оффтоп :)
</offtopic>

СЗОТ.