PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » как из exe получить иконку нужного размера


как из exe получить иконку нужного размера

Сообщений 1 страница 7 из 7

1

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

спецом делал иконку 16х256, метил их и смотрел куда какую винда положит, везде разные
даже на разных мониторах с разным разрешением могут быть разные иконки

0

2

newJS
В настройках ExtractIconEx_() два размера большая и маленькая. Из них большая видимо сама подстраивается методом выбора или трансформирования, а маленькая 16х16. Зависит от настроек рабочего стола, он может иметь размеры иконок 32х32, а может по умолчанию 48х48. Многие меняют на 32х32, как я, потому что привык к WinXP и мне картины на рабочем столе не нужны. Возможно кто-то использует огромный телевизор как экран компа.

Возможно эта тема поможет: how to save ico file?

0

3

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

LookupIconIdFromDirectory Функция LookupIconIdFromDirectory ищет все значки или данные курсора для значка или курсора, который лучше всего подходит текущему устройству отображения.

Чтобы установить желательную высоту или ширину, используйте функцию LookupIconIdFromDirectoryEx.
LookupIconIdFromDirectoryEx Функция LookupIconIdFromDirectoryEx ищет все значки или данные курсора для значка или курсора, который лучше всего подходит текущему устройству отображения.

0

4

newJS
Что если сделать допустим 5 иконок с одним слоем, засунуть их в секцию DataSection как 5 отдельных и давать Windows ту самую...

0

5

AZJIO, ты ни как не поймёшь, мне надо из экзешника вытягивать эти иконки, из чужого
вот код из примеров который достаёт иконки всех размеров
надеюсь выдрать что мне надо
вот путь к файлу, там где примеры лежать
PureBasic Examples.Russian\Иконки\Извлечение иконки из исполняемого файла.pb

Код:
#RT_GROUP_ICON = #RT_ICON + 11 

Global hMod.l 
Global path.s 
Structure ICONDIRENTRYCOMMON 
  bWidth.b        ; Width, in pixels, of the image 
  bHeight.b       ; Height, in pixels, of the image 
  bColorCount.b   ; Number of colors in image (0 if >=8bpp) 
  bReserved.b     ; Reserved ( must be 0) 
  wPlanes.w       ; Color Planes 
  wBitCount.w     ; Bits per pixel 
  dwBytesInRes.l  ; How many bytes in this resource? 
EndStructure 

Structure ICONDIRENTRY 
  common.ICONDIRENTRYCOMMON 
  dwImageOffset.l ; Where in the file is this image? 
EndStructure 

Structure ICONDIR 
  idReserved.w              ; Reserved (must be 0) 
  idType.w                  ; Resource Type (1 for icons) 
  idCount.w                 ; How many images? 
  idEntries.ICONDIRENTRY[0] ; An entry for each image (idCount of 'em) 
EndStructure 

Structure GRPICONDIRENTRY_ 
  common.ICONDIRENTRYCOMMON 
  nId.w ; the ID 
EndStructure 

Structure GRPICONDIR_ 
  idReserved.w                  ; Reserved (must be 0) 
  idType.w                      ; Resource type (1 for icons) 
  idCount.w                     ; How many images? 
  idEntries.GRPICONDIRENTRY_[0]  ; The entries for each image 
EndStructure 

Procedure ExtractGroupIcon(pIcon.l, IconFileName.s) 
  If CreateFile(0, IconFileName) 
  *iconGroup.GRPICONDIR_ = pIcon 
  IconHeaderSize.l = SizeOf(ICONDIR) + (*iconGroup\idCount*2) *SizeOf(ICONDIRENTRY) 
  *icon.ICONDIR = AllocateMemory(IconHeaderSize) 
  WriteData(0, *icon, IconHeaderSize) 
  *icon\idCount = *iconGroup\idCount 
  *icon\idReserved = *iconGroup\idReserved 
  *icon\idType = *iconGroup\idType 
  Offset.l = IconHeaderSize 
  LastSize.l = 0 
  For i = 0 To *iconGroup\idCount-1 
    *icon\idEntries[i]\common\bColorCount = *iconGroup\idEntries[i]\common\bColorCount 
    *icon\idEntries[i]\common\bHeight = *iconGroup\idEntries[i]\common\bHeight 
    *icon\idEntries[i]\common\bReserved = *iconGroup\idEntries[i]\common\bReserved 
    *icon\idEntries[i]\common\bWidth = *iconGroup\idEntries[i]\common\bWidth 
    *icon\idEntries[i]\common\dwBytesInRes = *iconGroup\idEntries[i]\common\dwBytesInRes 
    *icon\idEntries[i]\common\wBitCount = *iconGroup\idEntries[i]\common\wBitCount 
    *icon\idEntries[i]\common\wPlanes = *iconGroup\idEntries[i]\common\wPlanes 

    hRes = FindResource_(hMod, *iconGroup\idEntries[i]\nID, #RT_ICON) 
    If hRes 
     Offset + ResSize 
     hLoadRes = LoadResource_(hMod,   hRes); 
     ResSize = SizeofResource_(hMod, hRes) 
     *icon\idEntries[i]\common\dwBytesInRes = ResSize 
     *icon\idEntries[i]\dwImageOffset = Offset 
     WriteData(0, hLoadRes, ResSize) 
   EndIf 
 Next i 
 FileSeek(0, 0) 
 WriteData(0, *icon, SizeOf(ICONDIR)) 
 For i = 0 To *icon\idCount-1 
   WriteData(0, @*icon\idEntries[i]\common, SizeOf(ICONDIRENTRYCOMMON)) 
   WriteData(0, @*icon\idEntries[i]\dwImageOffset, 4) 
 Next i 
 CloseFile(0) 
 Else 
  MessageRequester("", "Can`t create file " + IconFileName, #MB_ICONERROR) 
EndIf 
FreeMemory(*icon) 
EndProcedure 

Procedure.l EnumResNameProc(ResHandle.L, ResType.L, ResName.L, AppParam.L) 
  If ResType = #RT_GROUP_ICON 
       hRes = FindResource_(hMod, ResName, ResType)    
       hLoadRes = LoadResource_(hMod,   hRes); 
       ResSize.l = SizeofResource_(hMod, hRes) 
       hLoadRes = LockResource_(hLoadRes) 
       ExtractGroupIcon(hLoadRes, path + "MAINICON.ico") 
       ProcedureReturn #False 
    EndIf 
  ProcedureReturn #True 
EndProcedure 

Procedure.L EnumResTypeProc(ResHandle.L, ResType.L, AppParam.L) 
  EnumResourceNames_(ResHandle, ResType, @EnumResNameProc(), 0) 
 ProcedureReturn #True 
EndProcedure 

file.s = "l:\__Small\_Готовые мелочи\Ресурсы\icons\bookConstants-x86.exe" 
path = GetPathPart(file) 
hMod = LoadLibrary_(file) 
If hMod 
  EnumResourceTypes_(hMod, @EnumResTypeProc(), 0) 
  FreeLibrary_(hMod) 
EndIf

0

6

Возможно это поможет:
Extract Icon from exe,dll,ico,cur,bmp
Extract Icon from Dll/exe at non standard size(WINDOWS ONLY)

0

7

спасибо, посмотрю

0


Вы здесь » PureBasic - форум » PureBasic для Windows » как из exe получить иконку нужного размера