Иконки сетевых ресурсов
Модераторы: Duncon, Hawk, Romeo, Eugie
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Доброго времени суток, господа. У меня здесь возникла проблема с получением иконок сетевых ресурсов. Короче я спокойно получаю IShellFolder объект некого айтема в сетевых ресурсах, но, как выясняется, если этот объект является одним из так называемых "recent" сетевых ресурсов, то он не поодерживает методы интерфейса IExtractIcon (проще говоря QueryInterface с соответствующими параметрами возвращает E_NOINTERFACE).
Вопрос: как IE или тот же WinCmd (TotalCmd) получают иконки этих ресурсов, если даже более тяжеловесная шеловская функция SHGetInfo не может ничего сделать.
P.S. Если нужна дополнительная информация по вопросу - я к вашим услугам.
P.P.S. Если не ошибаюсь, господа Andy и Aik занимались подобными исследованиями. Надеюсь в первую очередь именно на вас.
Вопрос: как IE или тот же WinCmd (TotalCmd) получают иконки этих ресурсов, если даже более тяжеловесная шеловская функция SHGetInfo не может ничего сделать.
P.S. Если нужна дополнительная информация по вопросу - я к вашим услугам.
P.P.S. Если не ошибаюсь, господа Andy и Aik занимались подобными исследованиями. Надеюсь в первую очередь именно на вас.
Romeo, я так эту кухню и доконца и не заборол. В некоторых случаях, на сколько я понимаю, ты должен использовать интерфейс IShellIcon.
P.S: что есть recent сетевой ресурс я так и не понял.
P.S: что есть recent сетевой ресурс я так и не понял.
Даже самый дурацкий замысел можно воплотить мастерски
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Этим термином я назвал новуй папку, которая появляется в сетевом окружении, когда пользователь зашёл на некий ресурс в локальной сети. Этот механизм был разработан Биллом для того, чтобы якобы ускорить навигацтю по сети. На счёт IShellIcon, спасибо, сейчас изучу... однако вопрос всё равно остаётся открытым.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
IE юзает IExtractIcon.как IE
Почему у тебя не работает - может баги в коде?
Можно еще попробовать так:
Код: Выделить всё
SHGetFileInfo((LPCTSTR)pidl,0,&sfi,sizeof(SHFILEINFO),
SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_LINKOVERLAY)
*provided AS IS
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Короче исследования по направлению IShellIcon завершены. Фунциональности у интерфейса меньше, чем у IExtractIcon. А вот насчёт линков - это хорошее замечание. Сейчас почетаем-с что об этом думает MSDN. 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Всё, господа, проблема решена. Собака порылась именно в линках! На помощь пришёл COM Interface IShellLink. Кому будет интересно, могу рассказать подробнее, обращайтесь.
P.S. Функцией SHGetFileInfo не пользовался из принципа. Тестирования скорости, проведённые намного раньше возникшей проблемы, показали, что, обладая довольно приличной функциональностью, функция SHGetFileInfo на мелких задачах тупит неимоверно! Пользоваться ею лишь для того, чтобы получить иконку - это всё равно, что забивать в сапоги гвозди отбойным молотком
P.S. Функцией SHGetFileInfo не пользовался из принципа. Тестирования скорости, проведённые намного раньше возникшей проблемы, показали, что, обладая довольно приличной функциональностью, функция SHGetFileInfo на мелких задачах тупит неимоверно! Пользоваться ею лишь для того, чтобы получить иконку - это всё равно, что забивать в сапоги гвозди отбойным молотком

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo, не перегибай палку. SHGetFileInfo конечно работает немного медленно (что вобщем общеизвестно), но фраза тупит наимоверно это черезчур!функция SHGetFileInfo на мелких задачах тупит неимоверно
*provided AS IS
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Всё познаётся в сравнении, господин Andy 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
В три раза медленее, это "немного"? 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo, ну тебе же как я понимаю не тысячу иконок за секунду надо вытащить?
Ладно, хватит нам флеймить =) Итоги: SHGetFileInfo работает медленно, поэтому надо написать в Microsoft, чтобы в Windows Longhorn эту функцию из shell32.dll убрали %))

*provided AS IS