Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 18:48   #1
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию Как извлечь дескриптор значка функцией SHExtractIconsW

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

FileName db "C:\WINDOWS\system32\shell32.dl l",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 но там какоето значение есть но это вроде бы не дескриптор
Хотя может быть я и ошибаюсь или что то напутал

Не поможете разобратся с этой функцией
assch вне форума Ответить с цитированием
Старый 10.04.2011, 22:20   #2
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Всё получилось .
Надо было имя файла в кодировке ANSI перегнать в unicode-строку.
assch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер шрифта и самого значка не совпадают Foxy-Vixen Помощь студентам 0 25.09.2010 21:16
Как извлечь DIB из Clipboard? vag2005 Общие вопросы .NET 0 02.04.2010 22:41
Как проверить дескриптор (указатель) на правильность? TwiX Общие вопросы Delphi 11 13.02.2010 22:10
как получить дескриптор приложения в C#? fiatik Общие вопросы .NET 1 08.11.2008 08:18