Код (Text): TDIB STRUCT ; ( sizeof=0x54, 54h, standard type - 84 byte ) bmType DWORD ? bmWidth DWORD ? bmHeight DWORD ? bmWidthBytes DWORD ? bmPlanes WORD ? bmBitsPixel WORD ? bmBits DWORD ? biSize DWORD ? biWidth DWORD ? biHeight DWORD ? biPlanes WORD ? biBitCount WORD ? biCompression DWORD ? biSizeImage DWORD ? biXPelsPerMeter DWORD ? biYPelsPerMeter DWORD ? biClrUsed DWORD ? biClrImportant DWORD ? dsBitfields DWORD 3 dup (?) dshSection DWORD ? dsOffset DWORD ? TDIB ENDS TInfo STRUCT ; ( sizeof=0x14, 14h, standard type - 20 byte ) fIcon DWORD ? xHotspot DWORD ? yHotspot DWORD ? hbmMask DWORD ? hbmColor DWORD ? TInfo ENDS .data FileName db "C:\WINDOWS\system32\shell32.dll",0 Index dd 130 hInstance dd ? HandIco dd ? HandRes dd ? PInfo TInfo <0> PDIB TDIB <0> .code invoke ExtractIcon,hInstance,addr FileName,Index mov HandIco,eax Этой функцией ExtractIcon (как пример) можно извлечь дескриптор значка который находится в системной библиотеке shell32.dll с индексом 130 и например с помощью связки функций CreateWindowEx (Static) и SendMessage отобразить эту иконку в окне приложения. Но вот если стоит задача ещё и вытащить эту иконку, то есть скопировать её в файл в формате Ico. то что для этого нужно сделать. Например в утилитке написаной мной на языке Autoit этот алгоритм происходит так. Если перевести на синтаксис асемблера то код наверное должен выглядеть так: Код (Text): invoke GetIconInfo,HandIco, addr pInfo Где функция GetIconInfo заполняет структуру PInfo в частности адресное поле PInfo.hbmColor где будет находится Хендл для функции CopyImage Код (Text): invoke CopyImage, PInfo.hbmColor, 0, 0, 0, 2008h mov HandRes,eax На выходе CopyImage будет значение которое нужно как Хендл поставить в функцию GetObject Код (Text): invoke GetObject, HandRes, sizeof PDIB, addr PDIB Функция GetObject в свою очередь (должна) заполнять структуру PDIB. И вот здесь у меня облом, так как функция GetObject (в регистре eax) должна возвратить число отличное от нуля, а конкректно она возращает число заполненных байтов, то есть число равное sizeof PDIB. А у меня возвращается "0" тоесть функция сработала не правильно и структуру PDIB не заполнила. Не пойму где может быть ошибка или в CopyImage я что то не то сделал или в GetObject. Знаю только что функция GetIconInfo отработала нормально так как заполнила структуру pInfo правильно. Кто нибудь в курсе этих алгоритмов на асемблере. Не подскажете в чём проблема (где я что напутал)? Может быть ещё есть какой нибудь способ? В качестве обьяснения зачем мне это нужно имея готовую прогу. Просто хочется перегнать свою прогу на асемблер (просто так для души). PS Этот алгоритм не полный там ещё должны работать функции CreateFile и WriteFile. Просто ошибка пока на этом этапе.