Results 1 to 7 of 7

Thread: How To Change an exe icon

  1. #1

    Thread Starter
    Member
    Join Date
    Jan 2012
    Posts
    33

    How To Change an exe icon

    Hello Users


    please help me to thes :
    i have ex. firefox.exe
    i wont code for change icon in vb.net



    Thanks Alot

  2. #2

    Thread Starter
    Member
    Join Date
    Jan 2012
    Posts
    33

    Re: How To Change an exe icon

    Please Help Me Fast

  3. #3
    Frenzied Member
    Join Date
    Nov 2010
    Posts
    1,470

    Re: How To Change an exe icon

    if you mean a shortcut to something that uses firefox then you aare stuck with it

    if you mean any old exe that you want to change then change it in the properties of the program
    either in windows or in SDK you will find use icon

    here to talk

  4. #4

    Thread Starter
    Member
    Join Date
    Jan 2012
    Posts
    33

    Re: How To Change an exe icon

    Noooooooooooooooooooooooooooooooooooooooooooo


    I wont Code in vb.net change any exe icon

  5. #5
    Karen Payne MVP kareninstructor's Avatar
    Join Date
    Jun 2008
    Location
    Oregon
    Posts
    6,714

    Re: How To Change an exe icon

    In short the following code can change an app icon if a) the file is not currently open b) you have permissions from Windows security.

    Code:
    IconInjector.InjectIcon("SomeFileName")
    Code:
    Imports System.Runtime.InteropServices
    Imports System.Security
    Public Class IconInjector
        ' Basically, you can change icons with the UpdateResource api call.
        ' When you make the call you say "I'm updating an icon", and you send the icon data. 
        ' The main problem is that ICO files store the icons in one set of structures, and exe/dll files store them in 
        ' another set of structures. So you have to translate between the two -- you can't just load the ICO file as
        ' bytes and send them with the UpdateResource api call.
        <SuppressUnmanagedCodeSecurity()> _
        Private Class NativeMethods
            <DllImport("kernel32")> _
            Public Shared Function BeginUpdateResource( _
                ByVal fileName As String, _
                <MarshalAs(UnmanagedType.Bool)> ByVal deleteExistingResources As Boolean) As IntPtr
            End Function
    
            <DllImport("kernel32")> _
            Public Shared Function UpdateResource( _
                ByVal hUpdate As IntPtr, _
                ByVal type As IntPtr, _
                ByVal name As IntPtr, _
                ByVal language As Short, _
                <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=5)> _
                ByVal data() As Byte, _
                ByVal dataSize As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
            End Function
    
            <DllImport("kernel32")> _
            Public Shared Function EndUpdateResource( _
                ByVal hUpdate As IntPtr, _
                <MarshalAs(UnmanagedType.Bool)> ByVal discard As Boolean) As <MarshalAs(UnmanagedType.Bool)> Boolean
            End Function
        End Class
    
        ' The first structure in an ICO file lets us know how many images are in the file.
        <StructLayout(LayoutKind.Sequential)> _
        Private Structure ICONDIR
            Public Reserved As UShort  ' Reserved, must be 0
            Public Type As UShort      ' Resource type, 1 for icons.
            Public Count As UShort     ' How many images.
            ' The native structure has an array of ICONDIRENTRYs as a final field.
        End Structure
    
        ' Each ICONDIRENTRY describes one icon stored in the ico file. The offset says where the icon image data 
        ' starts in the file. The other fields give the information required to turn that image data into a valid
        ' bitmap.
        <StructLayout(LayoutKind.Sequential)> _
        Private Structure ICONDIRENTRY
            Public Width As Byte            ' Width, in pixels, of the image
            Public Height As Byte           ' Height, in pixels, of the image
            Public ColorCount As Byte       ' Number of colors in image (0 if >=8bpp)
            Public Reserved As Byte         ' Reserved ( must be 0)
            Public Planes As UShort         ' Color Planes
            Public BitCount As UShort       ' Bits per pixel
            Public BytesInRes As Integer   ' Length in bytes of the pixel data
            Public ImageOffset As Integer  ' Offset in the file where the pixel data starts.
        End Structure
    
        ' Each image is stored in the file as an ICONIMAGE structure:
        'typdef struct
        '{
        '   BITMAPINFOHEADER   icHeader;      // DIB header
        '   RGBQUAD         icColors[1];   // Color table
        '   BYTE            icXOR[1];      // DIB bits for XOR mask
        '   BYTE            icAND[1];      // DIB bits for AND mask
        '} ICONIMAGE, *LPICONIMAGE;
    
    
        <StructLayout(LayoutKind.Sequential)> _
        Private Structure BITMAPINFOHEADER
            Public Size As UInteger
            Public Width As Integer
            Public Height As Integer
            Public Planes As UShort
            Public BitCount As UShort
            Public Compression As UInteger
            Public SizeImage As UInteger
            Public XPelsPerMeter As Integer
            Public YPelsPerMeter As Integer
            Public ClrUsed As UInteger
            Public ClrImportant As UInteger
        End Structure
    
        ' The icon in an exe/dll file is stored in a very similar structure:
        <StructLayout(LayoutKind.Sequential, Pack:=2)> _
        Private Structure GRPICONDIRENTRY
            Public Width As Byte
            Public Height As Byte
            Public ColorCount As Byte
            Public Reserved As Byte
            Public Planes As UShort
            Public BitCount As UShort
            Public BytesInRes As Integer
            Public ID As UShort
        End Structure
    
        Public Shared Sub InjectIcon(ByVal exeFileName As String, ByVal iconFileName As String)
            InjectIcon(exeFileName, iconFileName, 1, 1)
        End Sub
    
        Public Shared Sub InjectIcon(ByVal exeFileName As String, ByVal iconFileName As String, ByVal iconGroupID As UInteger, ByVal iconBaseID As UInteger)
            Const RT_ICON As Integer = 3UI
            Const RT_GROUP_ICON As Integer = 14UI
            Dim iconFile As IconFile = iconFile.FromFile(iconFileName)
            Dim hUpdate = NativeMethods.BeginUpdateResource(exeFileName, False)
            Dim data = iconFile.CreateIconGroupData(iconBaseID)
            NativeMethods.UpdateResource(hUpdate, New IntPtr(RT_GROUP_ICON), New IntPtr(iconGroupID), 0, data, data.Length)
            For i = 0 To iconFile.ImageCount - 1
                Dim image = iconFile.ImageData(i)
                NativeMethods.UpdateResource(hUpdate, New IntPtr(RT_ICON), New IntPtr(iconBaseID + i), 0, image, image.Length)
            Next
            NativeMethods.EndUpdateResource(hUpdate, False)
        End Sub
    
        Private Class IconFile
    
            Private iconDir As New ICONDIR
            Private iconEntry() As ICONDIRENTRY
            Private iconImage()() As Byte
    
            Public ReadOnly Property ImageCount() As Integer
                Get
                    Return iconDir.Count
                End Get
            End Property
    
            Public ReadOnly Property ImageData(ByVal index As Integer) As Byte()
                Get
                    Return iconImage(index)
                End Get
            End Property
    
            Private Sub New()
            End Sub
    
            Public Shared Function FromFile(ByVal filename As String) As IconFile
                Dim instance As New IconFile
                ' Read all the bytes from the file.
                Dim fileBytes() As Byte = IO.File.ReadAllBytes(filename)
                ' First struct is an ICONDIR
                ' Pin the bytes from the file in memory so that we can read them.
                ' If we didn't pin them then they could move around (e.g. when the 
                ' garbage collector compacts the heap)
                Dim pinnedBytes = GCHandle.Alloc(fileBytes, GCHandleType.Pinned)
                ' Read the ICONDIR
                instance.iconDir = DirectCast(Marshal.PtrToStructure(pinnedBytes.AddrOfPinnedObject, GetType(ICONDIR)), ICONDIR)
                ' which tells us how many images are in the ico file. For each image, there's a ICONDIRENTRY, and associated pixel data.
                instance.iconEntry = New ICONDIRENTRY(instance.iconDir.Count - 1) {}
                instance.iconImage = New Byte(instance.iconDir.Count - 1)() {}
                ' The first ICONDIRENTRY will be immediately after the ICONDIR, so the offset to it is the size of ICONDIR
                Dim offset = Marshal.SizeOf(instance.iconDir)
                ' After reading an ICONDIRENTRY we step forward by the size of an ICONDIRENTRY            
                Dim iconDirEntryType = GetType(ICONDIRENTRY)
                Dim size = Marshal.SizeOf(iconDirEntryType)
                For i = 0 To instance.iconDir.Count - 1
                    ' Grab the structure.
                    Dim entry = DirectCast(Marshal.PtrToStructure(New IntPtr(pinnedBytes.AddrOfPinnedObject.ToInt64 + offset), iconDirEntryType), ICONDIRENTRY)
                    instance.iconEntry(i) = entry
                    ' Grab the associated pixel data.
                    instance.iconImage(i) = New Byte(entry.BytesInRes - 1) {}
                    Buffer.BlockCopy(fileBytes, entry.ImageOffset, instance.iconImage(i), 0, entry.BytesInRes)
                    offset += size
                Next
                pinnedBytes.Free()
                Return instance
            End Function
    
            Public Function CreateIconGroupData(ByVal iconBaseID As UInteger) As Byte()
                ' This will store the memory version of the icon.
                Dim sizeOfIconGroupData As Integer = Marshal.SizeOf(GetType(ICONDIR)) + Marshal.SizeOf(GetType(GRPICONDIRENTRY)) * ImageCount
                Dim data(sizeOfIconGroupData - 1) As Byte
                Dim pinnedData = GCHandle.Alloc(data, GCHandleType.Pinned)
                Marshal.StructureToPtr(iconDir, pinnedData.AddrOfPinnedObject, False)
                Dim offset = Marshal.SizeOf(iconDir)
                For i = 0 To ImageCount - 1
                    Dim grpEntry As New GRPICONDIRENTRY
                    Dim bitmapheader As New BITMAPINFOHEADER
                    Dim pinnedBitmapInfoHeader = GCHandle.Alloc(bitmapheader, GCHandleType.Pinned)
                    Marshal.Copy(ImageData(i), 0, pinnedBitmapInfoHeader.AddrOfPinnedObject, Marshal.SizeOf(GetType(BITMAPINFOHEADER)))
                    pinnedBitmapInfoHeader.Free()
                    grpEntry.Width = iconEntry(i).Width
                    grpEntry.Height = iconEntry(i).Height
                    grpEntry.ColorCount = iconEntry(i).ColorCount
                    grpEntry.Reserved = iconEntry(i).Reserved
                    grpEntry.Planes = bitmapheader.Planes
                    grpEntry.BitCount = bitmapheader.BitCount
                    grpEntry.BytesInRes = iconEntry(i).BytesInRes
                    grpEntry.ID = CType(iconBaseID + i, UShort)
                    Marshal.StructureToPtr(grpEntry, New IntPtr(pinnedData.AddrOfPinnedObject.ToInt64 + offset), False)
                    offset += Marshal.SizeOf(GetType(GRPICONDIRENTRY))
                Next
                pinnedData.Free()
                Return data
            End Function
    
        End Class
    End Class

  6. #6

    Thread Starter
    Member
    Join Date
    Jan 2012
    Posts
    33

    Re: How To Change an exe icon

    Thanks , I will try it xD

  7. #7

    Thread Starter
    Member
    Join Date
    Jan 2012
    Posts
    33

    Re: How To Change an exe icon

    100&#37; Work Thanks xD

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width