Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как извлечь дескриптор значка функцией SHExtractIconsW  (Прочитано 4718 раз)
0 Пользователей и 1 Гость смотрят эту тему.
assch
Интересующийся

ru
Offline Offline

« : 10-04-2011 14:53 » 

Например нужно извлечь дескриптор значка из указанного исполняемого файла
или как в данном примере из динамически подключаемой библиотеки (DLL)
(для последующего отображения в окне программы)
Для примера обьявим переменные

FileName   db "C:\WINDOWS\system32\shell32.dll",0
Index      dd 130
hInstance  dd ?
Mas1       dd 0
Mas2       dd 0

Можно извлечь дескриптор значка с помощью функции

invoke ExtractIcon,hInstance,addr FileName,Index

На выходе дескриптор значка будет в регистре EAX
Но в окне программы эта иконка будет отображатся
только с размерами 32х32

Можно извлечь дескриптор значка с помощью функции

invoke ExtractIconEx,addr FileName,Index,addr Mas1,addr Mas2,1

На выходе дескриптор значка будет в указателях (Mas1 и Mas2)
 
Если взять дескриптор значка из указателя Mas1
То в окне программы эта иконка будет отображатся
только с размерами 32х32

Если взять дескриптор значка из указателя Mas2
То в окне программы эта иконка будет отображатся
только с размерами 16х16

Короче отображение иконки в окне программы с произвольными
размерами например (48х48)не получится

Но есть ещё функция которая позволяет это сделать
Но как я её не крутил извлечь дескриптор значка
мне так и не удалось

invoke SHExtractIconsW,addr FileName,Index,48,48,addr Mas1,addr Mas2,1,0

На MSDN посмотрел эту функцию
И примерный перевод (хотя не исключаю что что то напутал)
1 - параметр название файла (где находится значок)
2 -  индекс значка
3 и 4 -  размеры которые ты хочешь
5 - указатель на массив хендлов
6 - указатель идентификатора ресурса извлеченного символа
7 - сколько иконок ты хочешь извлечь
8 - какой то флаг (вроде можно ноль хотя могу и ошибатся)

Вроде бы дескриптор значка должен быть или в 5 или в 6 параметре
Но там всегда ноль навсякий случай посмотрел что на выходе в
регистре EAX но там какоето значение есть но это вроде бы не дескриптор
Хотя может быть я и ошибаюсь или что то напутал
Не поможете разобратся с этой функцией

Добавлено через 3 часа и 29 минут:
Всё получилось .
Надо было имя файла в кодировке ANSI перегнать в unicode-строку.
« Последнее редактирование: 10-04-2011 18:22 от assch » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines