0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как узнать номер иконки DLL или EXE-файла

Как узнать номер иконки DLL или EXE-файла

В темах с коллекциями скинов вопросы и обсуждения запрещены! Пожалуйста внимательно читайте заголовки тем.

Crystal Icon Set (QVGA & VGA) — это одна из многих библиотек от программы IconXT. Зайдя по приведённой чуть ниже ссылке, можно скачать файлы с расширением *.ixt. Скачайте файл и смените расширение с *.ixt на *.dll. Взято с JDH Software.com:
_http://www.jdhsoftware.com/index.php?file=Page&name=IconXT_Skins

Author/Copyrights: CrystalXP, Everaldo

Вот как то давно делал иконки для SK Shortcut Manager
img-9389-1234.JPG
И так же юзаю их для подмены в файле ResHacker’ом 😀
Все иконки находятся в одном dll! Суммарно их порядка 197 штук размеры 16х16, 32х32, 64х64
Download : VAIO_SK_Shortcut_Manager.zip

Сообщение отредактировал e202 — 06.10.06, 07:02

Вот у братьев белорусов на wce.by нашел.Для VGA ничё так смотрится(хотелось бы получше) , а на qVGA думаю будут отлично смотреться.

Vista Inspirat (QVGA & VGA) — это одна из многих библиотек от программы IconXT. Для того, чтобы вновь использовать данную библиотеку в IconXT, достаточно сменить расширение на .ixt, то есть, переименовать VistaInspirat.dll в VistaInspirat.ixt.

Author/Copyrights: Crystal XP, dlb

Vista Cameleon (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

Macintosh Icon Set (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

VBTWO or Vista Beta Lite (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

VAIO Icon Set (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

Windows Vista PE (QVGA) — это одна из многих библиотек для программы IconXT.

Vista RC1 (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

IconsLib (QVGA) — библиотека иконок 16*16 и 32*32. Размер: 64kB

Как узнать номер иконки DLL или EXE-файла

Здравствуйте,
помогите разобраться пожалуйста.
Вопрос относительно иконок в Dll и Exe файлах. К примеру кнопки Internet Exlorer ссылаются на иконки в Dll или Exe файле вот так:
C:PROGRAM FILESSIBER SYSTEMSAI ROBOFORMROBOFORM.DLL,201
Это якобы должно означать, что нужна иконка под № 201. Но дело в том, что в этом файле их только 20 (проверено разными способами и програмами). Как узнать какая нужна иконка? Это точно не первая иконка файла. Я пользовался
ExtractAssociatedIcon(РInstance, PChar(Name), IconIndex) и
ExtractIcon(РInstance, PChar(Name), IconIndex) результат одинаков.


Suntechnic ( 2002-06-06 19:56 ) [1]

№ 201 это не номер иконки, а её идентификатор, а кто сказал, что они должны быть по порядку?
Хочешь извлечь иконку с идентификатором № 201? Тогда делай LoadLibrary и дальше LoadIcon c идентификатором.


Song ( 2002-06-06 20:40 ) [2]


Nickolay ( 2002-06-07 12:58 ) [3]

а что это за функция? У TIcon такой нет. Какой Delphi?


Song ( 2002-06-07 13:38 ) [4]


Nickolay ( 2002-06-07 14:59 ) [5]

Народ, а можно пример? Что то я не совсем понял.


Suntechnic ( 2002-06-07 20:27 ) [6]

>Song © (07.06.02 13:38)
Что то ты тут напутал. У TIcon нет такой ф-ции. У TBitmap есть. Правда может в 6 версии добавили, так что спорить не буду, да и вопрос вроде в конференции по Win API.

>Nickolay (07.06.02 14:59)
Ну что здесь не понятного. Иконки обычно хранятся в ресурсах. Ресурсы могут быть как у exe так и у dll. А иногда dll просто используется как хранилище ресурсов и ничего более. Так вот, если иконка находится не у тебя в exe, а где-то в dll то тебе необходимо загрузить эту dll с помошью LoadLibrary. А затем используя API ф-цию LoadIcon загрузить иконку из данной dll. Особое внимание обрати на первый параметр ф-ции LoadIcon. Туда должен передаваться handle твоей загруженной dll, который ты получишь после LoadLibrary.


Song ( 2002-06-07 23:12 ) [7]

2Suntechnic © (07.06.02 20:27) Delphi 6:

Loads an icon resource into the icon object.

procedure LoadFromResourceName(Instance: Cardinal; const ResName: string);

LoadFromResourceName loads the specified icon resource from a module»s executable file.

Instance is the handle of the module that contains the resource.

ResName is the name of the resource to load.


Nickolay ( 2002-06-10 11:09 ) [8]

2 Suntechnic
Всем огромное спасибо за помощь, теперь я понял и все заработало.

Читать еще:  Тёмная тема оформления в Google Chrome


Nickolay ( 2002-06-12 10:37 ) [9]

Возникла еще одна проблема.
Не вытаскиваются иконки из ЕХЕ файлов под Win98/ME.
LoadLibrary срабатывает, а вот LoadIcon возвращает 0. Кто нибудь знает в чем тут дело?
вот код:
procedure TForm1.Button2Click(Sender: TObject);
var
Name : String;
Ico : HIcon;
IconIndex : word;
AModule : THandle;
begin
Name := Edit3.Text;
IconIndex := StrToInt(Edit4.Text);
AModule := LoadLibraryEx(PChar(Name),0,LOAD_LIBRARY_AS_DATAFILE);
Edit1.Text := IntToStr(AModule);
Ico := LoadIcon(AModule,PChar(IconIndex));
Edit2.Text := IntToStr(Ico);
DrawIcon(Form1.Canvas.Handle,10,10,Ico);
FreeLibrary(AModule);
end;


Song ( 2002-06-12 11:16 ) [10]

А ExtractAssociatedIcon() не подойдёт? Там и мороки меньше..


Nickolay ( 2002-06-12 11:40 ) [11]

ExtractAssociatedIcon() не ту иконку возвращает. Эта ф-ция возвращает иконки по их порядковому номеру, т.е. не то что мне надо. Получается та же проблема что я в вопросе писал.


Song ( 2002-06-12 12:20 ) [12]

Ok, тогда ExtractIcon() — эта будет ту возвращать.


Nickolay ( 2002-06-12 14:12 ) [13]

2 Song
Спасибо, вроде работает если индекс иконки указывать отрицательным.


Nickolay ( 2002-06-18 10:39 ) [14]

И снова проблема. На Win2000 работает несколько методов, все они возвращают то что надо, но под 98 и Милениум из DLL не вытаскивает, что примечательно из ЕХЕ вытаскивает правильно.

Как извлечь иконку из EXE и DLL

Иногда возникает ситуация при которой необходимо извлечь иконку из EXE и DLL-файла. Windows дает возможность использовать для ярлыков и программ иконки встроенные в файлы DLL и EXE, но не позволяет извлечь их и сохранить в формате ICO или PNG.

В этой статье мы рассмотрим несколько бесплатных программ, которые могут извлечь иконку из EXE и DLL файлов в Windows 10.

Файл ICO

ICO — это файл изображений, который используется для иконок приложений и ярлыков Windows. Файл ICO содержит одно или несколько изображений с различными размерами и глубиной цвета, поэтому их можно использовать с разным разрешением экрана. Традиционно исполняемые файлы содержат иконку в формате ICO, поэтому они отображаются в меню «Пуск» и на ярлыках на рабочем столе. Операционная система позволяет изменить иконку файла или ярлыка, загрузив ее из другого файла *.ICO, *.EXE, *.DLL.

В Windows 10 есть свои иконки, которые находятся в файлах:

  • C:Windowssystem32shell32.dll
  • C:Windowssystem32imageres.dll
  • C:Windowssystem32moricons.dll
  • C:Windowsexplorer.exe

Как извлечь иконку из EXE и DLL

Чтобы извлечь иконку из файла, вам потребуется сторонний софт. Для этого есть множество утилит. Я расскажу о трех надежных бесплатных программах, которые я использую.

Начнем с утилиты Resource Hacker.

Извлечь иконку из EXE или DLL с помощью Resource Hacker

Resource Hacker — это удобное и простое в использовании приложение, которое сэкономит ваше время при необходимости извлечь значок из файла в Windows 10.

Шаг 1: Скачайте Resource Hacker .

Шаг 2: Установите приложение.

Шаг 3: Запустите приложение Resource Hacker.

Шаг 4: Перейдите в меню «Файл» —> «Открыть» или нажмите Ctrl + O, чтобы найти файл, из которого следует извлечь иконку (я открою папку c:windowsexplorer.exe).

Шаг 5: На левой панели разверните группу значков и перейдите к нужному значку (используйте область предварительного просмотра справа).

Шаг 6: В меню выберите «Действие» —> «Сохранить ресурс * .ico».

Шаг 7: Выберите папку для сохранения файла ICO и нажмите Сохранить.

Теперь значок извлечен и сохранен в файле *.ico:

Несколько советов по использованию Resource Hacker

  • Resource Hacker — это 32-битное приложение. Если вы используете его в 64-битной версии Windows 10, оно может не открыть определенные системные файлы. В таком случае вы можете скопировать их в другой каталог, например, скопировать файл c:windowssystem32shell32.dll в c:data и открыть файл c:datashell32.dll в Resource Hacker.
  • Сохраняя отдельные иконки из группы иконок, вы получаете один файл с расширением ICO с одним размером иконки.
  • Чтобы получить файл ICO со всеми доступными размерами значков, перейдите к узлу «Группа значков» на левой панели, разверните ее и повторите шаги, описанные выше.

Некоторым пользователям может быть сложно использовать Resource Hacker. Пара альтернативных приложений: IconViewer и IcoFX, позволят сохранять значков в других форматах изображений, включая PNG и BMP.

Извлечение иконки из файлов EXE и DLL с помощью IconViewer

Шаг 1: Скачайте IconViewer (есть как 32-битные, так и 64-битные версии программы).

Шаг 2: Установите приложение IconViewer.

Шаг 3 Откройте проводник и откройте папку, содержащую файл, из которого хотите извлечь иконки. Например, перейдите в c:WindowsSystem32.

Шаг 4: Щелкните правой кнопкой мыши по файлу с иконками, например, «shell32.dll» и выберите «Свойства» из контекстного меню.

Шаг 5: Перейдите на вкладку «Icons», добавленную приложением IconViewer.

Шаг 6: Выберите значок, который надо извлечь, и щелкните значок дискеты, чтобы сохранить его.

Шаг 7: Укажите папку назначения, имя файла и выберите формат файла (ICO, PNG или BMP). Далее нажмите на кнопку «Сохранить».

Извлечь иконку из EXE или DLL-файла с помощью IcoFX

IcoFX — еще один бесплатный инструмент, для извлечения значков ( официальный сайт ). Сегодня это уже платная программа, но к счастью, архив программ FileHippo по-прежнему предлагает для скачивания старую бесплатную версию 1.6.4.

Читать еще:  Новые настройки стартовой страницы Google Chrome

Основное отличие IcoFX от приложений, упомянутых выше, заключается в том, что IcoFX — это полнофункциональный редактор иконок. Resource Hacker позволяет изменять файлы. IconViewer — это просто средство извлечения значков. С помощью IcoFX вы можете рисовать собственные значки, используя инструменты для рисования и наложения графических эффектов.

Чтобы извлечь значок из файла с IcoFX:

Шаг 1: Скачайте бесплатную версию 1.6.4 из архива FileHippo .

Шаг 2: Выберите File —> Open из меню (или нажмите Ctrl + O).

Шаг 3: Выберите файл для извлечения значка. Появится диалоговое окно со всеми значками, которые приложение смогло найти в данном файле.

Шаг 4: Выберите иконку и нажмите «Extract». Это откроет значок в редакторе.

Шаг 5: Чтобы извлечь значок определенного размера, щелкните правой кнопкой мыши по его миниатюре в левой панели редактора и нажмите на кнопку «Экспорт изображения …» в контекстном меню.

Шаг 6: Укажите папку для хранения файла, нужный формат файла (PNG, BMP, JPEG, GIF или JP2) и присвойте имя файлу.

Шаг 7: Нажмите на кнопку «Сохранить».

Заключение

На этом все. Теперь вы знаете как извлечь иконки из DLL и EXE-файлов. В следующей статье я расскажу, как изменить иконку любой программы.

Как узнать номер иконки DLL или EXE-файла

200?’200px’:»+(this.scrollHeight+5)+’px’);»> GetIconFromResource(dest, source, idx)
<
; info: http://msdn.microsoft.com/en-us/library/ms997538.aspx
SetBatchLines, -1
if !hModule := Validation(dest, source, idx)
Return

for key, handle in FindGroup(source, idx, hModule)
<
pGroupInfo := GetResData(hModule, handle)
if !IsObject(DataArray := CreateDataArray(hModule, pGroupInfo, CountIcons, size, idx ? idx : A_Index))
<
if (DataArray = 6)
continue
else
break
>
pData := CreateDataBuff(DataArray, pGroupInfo, CountIcons, size)
res := Data2icoFile(pData, dest, size, idx)
> until !res

DllCall(«FreeLibrary», Ptr, hModule)
>

Validation(dest, source, idx)
<
if !((idx + 1) > 0 && source := ValidateName(source))
Return

static dwFlags := (LOAD_LIBRARY_AS_DATAFILE := 0x2 | LOAD_LIBRARY_AS_IMAGE_RESOURCE := 0x20)
if !hModule := DllCall(«LoadLibraryEx», Str, source, Ptr, 0, UInt, dwFlags, Ptr)
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, «Невозможно загрузить указанный модуль!`nОшибка » A_LastError, Str, «», UInt, 0)

ValidateName(FilePath)
<
SplitPath, FilePath. ext
if !(ext

= «i)exe|dll») && Error := «Допустимы только dll и exe файлы»
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Error, Str, «», UInt, 0)

if !FileExist(FilePath)
<
EnvGet, PathVar, Path
Loop, parse, PathVar, `;
continue
until FileExist(p := RTrim(A_LoopField, «») . «» . FilePath) && (FilePath := p) && found := 1

if !found && Text := «Файл » FilePath » не найден»
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)
>

FindGroup(source, idx, hModule)
<
Names := [idx, 0]
DllCall(«EnumResourceNames», Ptr, hModule, UInt, RT_GROUP_ICON := 14
, Ptr, RegisterCallback(«EnumGroupIconProc», «Fast», 4), Ptr, pNames := Object(Names))
ObjRelease(pNames)

if (Names.3 = «») && Text := idx ? «Иконка » . idx . » в файле » . source . » не найдена»
: «Иконки в файле » . source . » не найдены»
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)

Names.Remove(1, 2)
for i, Name in Names
Names[i] := DllCall(«FindResource», Ptr, hModule, Name + 1 ? «UInt» : «Str», Name, UInt, RT_GROUP_ICON, Ptr)
Return Names
>

EnumGroupIconProc(hModule, Type, Name, lp)
<
(Name>>16) ? Name := LTrim(StrGet(Name+0), «#»)
obj := Object(lp)
if !obj.1
obj.Insert(Name)
else if ((obj.2 += 1) = obj.1)
Return, 0, obj.3 := Name
Return 1
>

GetResData(hModule, hRes)
<
hData := DllCall(«LoadResource», Ptr, hModule, Ptr, hRes, Ptr)
Return DllCall(«LockResource», Ptr, hData, Ptr)
>

CreateDataArray(hModule, pIconGroup, ByRef CountIcons, ByRef offset, idx)
<
if NumGet(pIconGroup+0, 2, «UShort») != 1 && Text := «Ресурс » Idx » неправильного типа. Возможно, файл сжат или зашифрован`nПродолжить?»
Return DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «Неправильный ресурс», UInt, 4)

DataArray := [], RT_ICON := 3
CountIcons := NumGet(pIconGroup+0, 4, «UShort»)
offset := 6 + CountIcons*16

Loop % CountIcons
<
id := NumGet(pIconGroup + 6 + 14*A_Index — 2, «UShort»)
hRes := DllCall(«FindResource», Ptr, hModule, UInt, id, UInt, RT_ICON, Ptr)
pIcon := GetResData(hModule, hRes)
DataArray[A_Index] := , size: s := NumGet(pIconGroup + 6 + 14*A_Index — 6, «UInt»)
, offset: offset>
offset += s
>
Return DataArray
>

CreateDataBuff(DataArray, pIconGroup, CountIcons, size)
<
static IconData
VarSetCapacity(IconData, size)
DllCall(«RtlMoveMemory», Ptr, &IconData, Ptr, pIconGroup, Ptr, 6)

offset := 6
Loop % CountIcons
<
DllCall(«RtlMoveMemory», Ptr, &IconData + offset, Ptr, pIconGroup + offset — 2*(A_Index — 1), Ptr, 12)
NumPut(DataArray[A_Index].offset, &IconData + offset + 12, «UInt»), offset += 16
DllCall(«RtlMoveMemory», Ptr, &IconData + DataArray[A_Index].offset, Ptr, DataArray[A_Index].ptr, Ptr, DataArray[A_Index].size)
>
Return &IconData
>

Data2icoFile(pData, Dest, size, idx)
<
static i = 0
SplitPath, Dest,, Dir, Ext, OutNameNoExt
if !FileExist(Dir)
<
FileCreateDir, % Dir
if ErrorLevel && Text := «Невозможно создать папку » Dir «`nОшибка » A_LastError
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)
>

(!idx) ? Dest := (Ext ? SubStr(Dest, 1, -(StrLen(Ext) + 1)) : Dest) . «(» . ++i . «)» . (Ext ? «.» . Ext : «»)

if !(File := FileOpen(Dest, «w»)) && Text := «Невозможно открыть файл » Dest «на запись`nОшибка » A_LastError
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)

Как узнать номер иконки DLL или EXE-файла

В темах с коллекциями скинов вопросы и обсуждения запрещены! Пожалуйста внимательно читайте заголовки тем.

Crystal Icon Set (QVGA & VGA) — это одна из многих библиотек от программы IconXT. Зайдя по приведённой чуть ниже ссылке, можно скачать файлы с расширением *.ixt. Скачайте файл и смените расширение с *.ixt на *.dll. Взято с JDH Software.com:
_http://www.jdhsoftware.com/index.php?file=Page&name=IconXT_Skins

Читать еще:  Удаленный доступ к компьютеру в программе AeroAdmin

Author/Copyrights: CrystalXP, Everaldo

Вот как то давно делал иконки для SK Shortcut Manager
img-9389-1234.JPG
И так же юзаю их для подмены в файле ResHacker’ом 😀
Все иконки находятся в одном dll! Суммарно их порядка 197 штук размеры 16х16, 32х32, 64х64
Download : VAIO_SK_Shortcut_Manager.zip

Сообщение отредактировал e202 — 06.10.06, 07:02

Вот у братьев белорусов на wce.by нашел.Для VGA ничё так смотрится(хотелось бы получше) , а на qVGA думаю будут отлично смотреться.

Vista Inspirat (QVGA & VGA) — это одна из многих библиотек от программы IconXT. Для того, чтобы вновь использовать данную библиотеку в IconXT, достаточно сменить расширение на .ixt, то есть, переименовать VistaInspirat.dll в VistaInspirat.ixt.

Author/Copyrights: Crystal XP, dlb

Vista Cameleon (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

Macintosh Icon Set (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

VBTWO or Vista Beta Lite (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

VAIO Icon Set (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

Windows Vista PE (QVGA) — это одна из многих библиотек для программы IconXT.

Vista RC1 (QVGA & VGA) — это одна из многих библиотек для программы IconXT.

IconsLib (QVGA) — библиотека иконок 16*16 и 32*32. Размер: 64kB

Как узнать номер иконки DLL или EXE-файла

200?’200px’:»+(this.scrollHeight+5)+’px’);»> GetIconFromResource(dest, source, idx)
<
; info: http://msdn.microsoft.com/en-us/library/ms997538.aspx
SetBatchLines, -1
if !hModule := Validation(dest, source, idx)
Return

for key, handle in FindGroup(source, idx, hModule)
<
pGroupInfo := GetResData(hModule, handle)
if !IsObject(DataArray := CreateDataArray(hModule, pGroupInfo, CountIcons, size, idx ? idx : A_Index))
<
if (DataArray = 6)
continue
else
break
>
pData := CreateDataBuff(DataArray, pGroupInfo, CountIcons, size)
res := Data2icoFile(pData, dest, size, idx)
> until !res

DllCall(«FreeLibrary», Ptr, hModule)
>

Validation(dest, source, idx)
<
if !((idx + 1) > 0 && source := ValidateName(source))
Return

static dwFlags := (LOAD_LIBRARY_AS_DATAFILE := 0x2 | LOAD_LIBRARY_AS_IMAGE_RESOURCE := 0x20)
if !hModule := DllCall(«LoadLibraryEx», Str, source, Ptr, 0, UInt, dwFlags, Ptr)
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, «Невозможно загрузить указанный модуль!`nОшибка » A_LastError, Str, «», UInt, 0)

ValidateName(FilePath)
<
SplitPath, FilePath. ext
if !(ext

= «i)exe|dll») && Error := «Допустимы только dll и exe файлы»
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Error, Str, «», UInt, 0)

if !FileExist(FilePath)
<
EnvGet, PathVar, Path
Loop, parse, PathVar, `;
continue
until FileExist(p := RTrim(A_LoopField, «») . «» . FilePath) && (FilePath := p) && found := 1

if !found && Text := «Файл » FilePath » не найден»
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)
>

FindGroup(source, idx, hModule)
<
Names := [idx, 0]
DllCall(«EnumResourceNames», Ptr, hModule, UInt, RT_GROUP_ICON := 14
, Ptr, RegisterCallback(«EnumGroupIconProc», «Fast», 4), Ptr, pNames := Object(Names))
ObjRelease(pNames)

if (Names.3 = «») && Text := idx ? «Иконка » . idx . » в файле » . source . » не найдена»
: «Иконки в файле » . source . » не найдены»
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)

Names.Remove(1, 2)
for i, Name in Names
Names[i] := DllCall(«FindResource», Ptr, hModule, Name + 1 ? «UInt» : «Str», Name, UInt, RT_GROUP_ICON, Ptr)
Return Names
>

EnumGroupIconProc(hModule, Type, Name, lp)
<
(Name>>16) ? Name := LTrim(StrGet(Name+0), «#»)
obj := Object(lp)
if !obj.1
obj.Insert(Name)
else if ((obj.2 += 1) = obj.1)
Return, 0, obj.3 := Name
Return 1
>

GetResData(hModule, hRes)
<
hData := DllCall(«LoadResource», Ptr, hModule, Ptr, hRes, Ptr)
Return DllCall(«LockResource», Ptr, hData, Ptr)
>

CreateDataArray(hModule, pIconGroup, ByRef CountIcons, ByRef offset, idx)
<
if NumGet(pIconGroup+0, 2, «UShort») != 1 && Text := «Ресурс » Idx » неправильного типа. Возможно, файл сжат или зашифрован`nПродолжить?»
Return DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «Неправильный ресурс», UInt, 4)

DataArray := [], RT_ICON := 3
CountIcons := NumGet(pIconGroup+0, 4, «UShort»)
offset := 6 + CountIcons*16

Loop % CountIcons
<
id := NumGet(pIconGroup + 6 + 14*A_Index — 2, «UShort»)
hRes := DllCall(«FindResource», Ptr, hModule, UInt, id, UInt, RT_ICON, Ptr)
pIcon := GetResData(hModule, hRes)
DataArray[A_Index] := , size: s := NumGet(pIconGroup + 6 + 14*A_Index — 6, «UInt»)
, offset: offset>
offset += s
>
Return DataArray
>

CreateDataBuff(DataArray, pIconGroup, CountIcons, size)
<
static IconData
VarSetCapacity(IconData, size)
DllCall(«RtlMoveMemory», Ptr, &IconData, Ptr, pIconGroup, Ptr, 6)

offset := 6
Loop % CountIcons
<
DllCall(«RtlMoveMemory», Ptr, &IconData + offset, Ptr, pIconGroup + offset — 2*(A_Index — 1), Ptr, 12)
NumPut(DataArray[A_Index].offset, &IconData + offset + 12, «UInt»), offset += 16
DllCall(«RtlMoveMemory», Ptr, &IconData + DataArray[A_Index].offset, Ptr, DataArray[A_Index].ptr, Ptr, DataArray[A_Index].size)
>
Return &IconData
>

Data2icoFile(pData, Dest, size, idx)
<
static i = 0
SplitPath, Dest,, Dir, Ext, OutNameNoExt
if !FileExist(Dir)
<
FileCreateDir, % Dir
if ErrorLevel && Text := «Невозможно создать папку » Dir «`nОшибка » A_LastError
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)
>

(!idx) ? Dest := (Ext ? SubStr(Dest, 1, -(StrLen(Ext) + 1)) : Dest) . «(» . ++i . «)» . (Ext ? «.» . Ext : «»)

if !(File := FileOpen(Dest, «w»)) && Text := «Невозможно открыть файл » Dest «на запись`nОшибка » A_LastError
Return, 0, DllCall(«MessageBox», Ptr, 0, Str, Text, Str, «», UInt, 0)

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector