Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неверное сохранение иконки файла 
:(
    Опции темы
ShadowDancer
Дата 13.9.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



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

Код


procedure MemToFile(FileName: string; var Memory: pointer; MemSize: integer);
var
  h: THandle;
  tmp: DWORD;
begin
h := CreateFile (PChar(FileName), MAXIMUM_ALLOWED, FILE_SHARE_READ, nil, CREATE_ALWAYS, 0, 0);
     WriteFile (h, Memory^, MemSize, tmp, nil);
     CloseHandle(h);
end;

procedure GetResource;
var
  Resource, HResInfo, ID: THandle;
  size: integer;
  p: pointer;
begin
 ID := LoadLibrary(PChar('file.exe'));
 HResInfo := FindResource(ID, 'MAINICON', RT_GROUP_ICON); 
 Resource := LoadResource(ID, HResInfo);
 p := LockResource(Resource);
 size := SizeofResource(ID, HResInfo);
 MemToFile('0xffff.ico', p, size);
 UnLockResource(Resource);
 FreeResource(Resource);
end

 

про ExtractIcon читал, что при извлечении, в некоторых случаях происходит потеря качаства иконки - из-за этого не использовал. В чём проблема с этим кодом ? Если у вас есть полностью рабочий код на чистейшем api по извлечению, то буд рад если вы поделитесь. Примеры по извлечению, которые попадались на глаза изпользовали другие модули
PM MAIL   Вверх
bems
Дата 13.9.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



ресурс-иконка и файл с иконкой внутри не одно и то же (а именно: файл содержит ресурс и еще какой-то хедер). Даже если этот код работает правильно, то все равно полученый файл не будет нормальным файлом иконки.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ShadowDancer
Дата 13.9.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



ну файл то - это обычный exe-шник, а эти функции и созданы для работы с exe-шниками
PM MAIL   Вверх
bems
Дата 13.9.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



я имел в виду что если ты сравнишь двоичное содержимое ресурса типа ICON и файла с расширением ico, то увидишь что второй в конце полностью содержит первый, а в начале есть еще какой-то блок.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ShadowDancer
Дата 13.9.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



впринципе, мне бы её хоть какую получить, но главное что бы через api, и сама ОС не изменяла содержимое файла
PM MAIL   Вверх
bems
Дата 13.9.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



екзешник твой? если да, то в ресурсе храни не иконку, а ico-файл

Добавлено через 1 минуту и 36 секунд
а, и еще: RT_GROUP_ICON и RT_ICON не одно и то же


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 13.9.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



ShadowDancer, там есть 2 типа ресурсов IconDir где описание того скока кадров иконке и сами кадры. Все это храниться отдельно. 

Советую ознакомиться с этой статьей. http://msdn.microsoft.com/en-us/library/ms997538.aspx
Тут все написано. Не так уж и сложно это все извлекается.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ShadowDancer
Дата 13.9.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.6.2006

Репутация: нет
Всего: нет



bems, эксешник может быть любым.

Alexeis, спасибо, ща постараюсь вникнуть
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.