Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вытаскивание ресурсов из *.dll и *.exe, Как вытащить иконки и другие ресурсы 
:(
    Опции темы
Empirik
Дата 18.11.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

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



Господа форумчане, пожалуйста помогите. Нужно вытащить из win32 екзешников иконки, и другие ресурсы. Я знаю что это можно сделать при помощи win API, но вот я знаю об этом только теоретически. Если у когонибуть есть сборки для работы с ресурсами не в .NET сборках, выложите пожалуйста. Или советом помогите, просто очень нужно.
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 18.11.2005, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Интересная задачка, помню как-то решал её в разделе С++. Набросал пример, выдаёт тот же результат, что ResExplorer при экспорте иконок:

Код
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Class1
    {
        static void Main()
        {
            // путь к EXE или DLL
            string filePath = @"c:\reflector.exe";

            // грузим ресурс
            IntPtr hModule = LoadLibrary(filePath);
            IntPtr hRes = FindResource(hModule, "#2", (IntPtr)RT_ICON);
            IntPtr hLoadedRes = LoadResource(hModule, hRes);
            IntPtr ptrRes = LockResource(hLoadedRes);
            int size = SizeofResource(hModule, hRes);

            // копируем ресурс в массив байтов
            byte[] buf = new byte[size];
            Marshal.Copy(ptrRes, buf, 0, size);

            // вот и всё, теперь можем делать с ним что угодно
            Stream stream = File.Create(@"c:\icon1.ico");
            stream.Write(buf, 0, size);
            stream.Close();
            
            // в конце выгружаем загруженный файл
            FreeLibrary(new HandleRef(null, hModule));
        }

    
        // функции, импортированные из kernel32

        [DllImport("kernel32.dll")]
        public static extern IntPtr LoadLibrary(string libFilename);
        [DllImport("kernel32.dll")]
        public static extern bool FreeLibrary(HandleRef hModule);
        [DllImport("kernel32.dll")]
        public static extern IntPtr FindResource(IntPtr hModule, string lpName, IntPtr lpType);
        [DllImport("kernel32.dll")]
        public static extern IntPtr LoadResource(IntPtr hModule, IntPtr hResInfo);
        [DllImport("kernel32.dll")]
        public static extern IntPtr LockResource(IntPtr hResData);
        [DllImport("kernel32.dll")]
        public static extern int SizeofResource(IntPtr hModule, IntPtr hResInfo);

        const int RT_CURSOR           = 1;
        const int RT_BITMAP           = 2;
        const int RT_ICON             = 3;
        const int RT_MENU             = 4;
        const int RT_DIALOG           = 5;
        const int RT_STRING           = 6;
        const int RT_FONTDIR          = 7;
        const int RT_FONT             = 8;
        const int RT_ACCELERATOR      = 9;
        const int RT_RCDATA           = 10;
        const int RT_MESSAGETABLE     = 11;

    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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