assch
Интересующийся
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-строку.
|