Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Как поменять иконку у любого exe-файла? Добавлено: 30.03.08 21:20  

Автор вопроса:  Alex

Ответить

  Ответы Всего ответов: 20  

Номер ответа: 16
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #16 Добавлено: 15.04.08 20:24
набросать его труда не составит

Это я погорячилась по ходу... с иконками такая фишка не проходит как например с RT_BITMAP. Дело в том, что иконки исполняемого файла хранятся не в RT_ICON а в RT_GROUP_ICON и тут уже все гораздо серьезнее.. При обычной замене иконка портится ((( Полазив немного по инету, наткнулась на статью по работе с ресурсами на с++. Особо не вдавалась в подробности на на первый взгляд вроде ничего выдающегося..
http://netcode.ru/cpp/?lang=&katID=6&skatID=68&artID=2765
Там все доходчиво расписано, так что тебе останется перевести нужный кусок на VB

Я остановилась на этом (добавляет ресурсы запросто, меняет тоже.. только не иконки)

using System;
using System.IO;
using System.Runtime.InteropServices;

namespace Win32ResExample
{

    class Program
    {


        static void Main(string[] args)
        {
            const int RES_ICON_GROUP = 14;
            const int APP_ICON_RES_ID = 32512;

            string m_appPath = AppDomain.CurrentDomain.BaseDirectory;
            string m_exeFilePath = m_appPath + "PEResTest.exe";
            string m_icoFilePath = m_appPath + "App.ico";

            IntPtr hUpdate = Win32.BeginUpdateResource(m_exeFilePath, false);
            if (hUpdate != IntPtr.Zero)
            {
                byte[] bytes = File.ReadAllBytes(m_icoFilePath);
                bool bSuccess = Win32.UpdateResource(hUpdate,
                                      ;(UInt32)RES_ICON_GROUP,
                                     ;(UInt32)APP_ICON_RES_ID,
                                                           0,
                                                       bytes,
                                        ;(UInt32)bytes.Length);
                if (bSuccess)
                    Console.Write("Ресурс \"{0}\" успешно записан\n", m_icoFilePath);
                else
                    Console.Write("Ошибка при записи ресурса \"{0}\"\n", m_icoFilePath);
                
                Win32.EndUpdateResource(hUpdate, !bSuccess);
            }
            Console.ReadLine();
        }
    }
}

public class Win32
{
    [;DllImport("KERNEL32.DLL", EntryPoint = "BeginUpdateResourceW", SetLastError = true,
       CharSet = CharSet.Unicode, ExactSpelling = true,
       CallingConvention = CallingConvention.StdCall)]
    public static extern IntPtr BeginUpdateResource(string pFileName, bool bDeleteExistingResources);

    [;DllImport("KERNEL32.DLL", EntryPoint = "UpdateResourceW", SetLastError = true,
       CharSet = CharSet.Unicode, ExactSpelling = true,
       CallingConvention = CallingConvention.StdCall)]
    public static extern bool UpdateResource(IntPtr hUpdate, UInt32 pType, UInt32 pName,
                                             UInt16 wLanguage, byte[] pData, UInt32 cbData);

    [;DllImport("KERNEL32.DLL", EntryPoint = "EndUpdateResourceW", SetLastError = true,
       CharSet = CharSet.Unicode, ExactSpelling = true,
       CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndUpdateResource(IntPtr hUpdate, bool bDiscard);
}

Ответить

Номер ответа: 17
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #17 Добавлено: 15.04.08 20:56
ВОт, кстати, тоже в тему чтоб понятно было что там да куда..

Ответить

Номер ответа: 18
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #18 Добавлено: 15.04.08 20:56
http://www.realcoding.net/article/view/4410

Ответить

Номер ответа: 19
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #19
Добавлено: 16.04.08 10:16
AgentFire, ты поспрашивай тут у людей, тебе скажут, что я пишу компилятор бейсика и знаю о формате PE32, возможно, лучше любого на этом форуме =) (да простят меня местные, если я не прав). Так что я знаю как устроена секция ресурсов и директория ресусов. И иконки там конвертированы в свой формат. Как вариант, можно использовать тулзу rc.exe (компилятор ресурсов), создавать объектник и из него уже читать иконку. Но это геморрой =) А искать готовые варианты кода конвертора мне не хотелось.

Ответить

Номер ответа: 20
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #20 Добавлено: 18.04.08 02:38
Весь инет облазил, а на этом сайте из принципа не смотрел? Здесь есть готовый пример на VB6, переделать его под .NET - пара минут делов, нужно только декларацию апи функций немного подправить.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам