powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сменить иконку одной программы на иконку другой
5 сообщений из 5, страница 1 из 1
сменить иконку одной программы на иконку другой
    #36019531
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер.

Вопрос по работе с ресурсами.
Интересует: как сменить иконку одной программы на другую?

Т.е. в папке есть две проги: 1.exe и 2.exe
Как поменять иконку одного приложения (1.exe)
на иконку второго?

Вот код, который добавляет иконку в exe и прописывает её.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
Private Declare Function BeginUpdateResource Lib "kernel32" _
Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal _
bDeleteExistingResources As Boolean) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias _
"UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, _
ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, _
ByVal cbData As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32" Alias _
"EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)


Private Const RT_ICON =  3 &
Private Const RT_GROUP_ICON =  14 

Private Type CursorOrIcon
    Reserved As Integer
    wType As Integer
    Count As Integer
End Type


Private Type ICONDIRENTRY
   bWidth As Byte
   bHeight As Byte
   bColorCount As Byte
   bReserved As Byte
   wPlanes As Integer
   wBitCount As Integer
   dwBytesInRes As Long
   dwImageOffset As Long
End Type

Private Type MEMICONDIRENTRY
   bWidth As Byte
   bHeight As Byte
   bColorCount As Byte
   bReserved As Byte
   wPlanes As Integer
   wBitCount As Integer
   dwBytesInRes As Long
   nID As Integer
End Type

Private Type BITMAPINFOHEADER '40 bytes
    a_Size As Long '=40
    b_Width As Long
    b_Height As Long
    c_Planes As Integer
    d_BitCount As Integer
    e_Compression As Long
    f_SizeImage As Long
    g_XPelsPerMeter As Long
    g_YPelsPerMeter As Long
    h_ClrUsed As Long
    i_ClrImportant As Long
End Type

Dim ICO As CursorOrIcon
Dim Bitm As BITMAPINFOHEADER
Dim IconR() As ICONDIRENTRY
Dim IconE() As MEMICONDIRENTRY
Dim Pic() As Byte
Dim mas() As Byte

Private Sub ReplaceIcon(sFileName As String, sIconName As String)
    Dim h As Long
    Dim FileName As String
    FileName = sFileName
     
    h = BeginUpdateResource(FileName, False)
     
    Open sIconName For Binary As # 1 
    Get # 1 , , ICO
     
    ReDim IconE(ICO.Count)
    ReDim IconR(ICO.Count)
    For i =  0  To ICO.Count -  1 
        Get # 1 , , IconR(i)
        IconE(i).bColorCount = IconR(i).bColorCount
        IconE(i).bHeight = IconR(i).bHeight
        IconE(i).bReserved = IconR(i).bReserved
        IconE(i).bWidth = IconR(i).bWidth
        IconE(i).dwBytesInRes = IconR(i).dwBytesInRes
        IconE(i).wBitCount = IconR(i).wBitCount
        IconE(i).wPlanes = IconR(i).wPlanes
        IconE(i).nID = i +  1 
    Next i
     
    For i =  0  To ICO.Count -  1 
        Get # 1 , IconR(i).dwImageOffset +  1 , Bitm
        ReDim Pic(IconR(i).dwBytesInRes)
        Get # 1 , , Pic
        ReDim mas(IconR(i).dwBytesInRes + Len(Bitm))
        CopyMemory mas( 0 ), Bitm, Len(Bitm)
        CopyMemory mas(Len(Bitm)), Pic( 0 ), IconR(i).dwBytesInRes
        Call UpdateResource(h, ByVal RT_ICON, i +  1 ,  0 , mas( 0 ), IconR(i).dwBytesInRes + Len(Bitm))   

    Next i
    ReDim mas(Len(ICO) + Len(IconE( 1 )) * ICO.Count)
    CopyMemory mas( 0 ), ICO, Len(ICO)
    For i =  0  To ICO.Count -  1 
        offset = Len(ICO) + Len(IconE( 1 )) * i
        CopyMemory mas(offset), IconE(i), Len(IconE(i))
    Next i
    Call UpdateResource(h, ByVal RT_GROUP_ICON,  1 ,  0 , mas( 0 ), Len(ICO) + Len(IconE( 1 )) * ICO.Count)    

    Call EndUpdateResource(h,  0 )
    Close # 1 
End Sub

Private Sub Command1_Click()
    ReplaceIcon "c:\1.exe", "c:\1.ico"
End Sub


Но увы, у меня так и не получилось смены не из ico, а из exe.

Подскажите, как?
...
Рейтинг: 0 / 0
сменить иконку одной программы на иконку другой
    #36020362
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто не работал с ресурсами?
...
Рейтинг: 0 / 0
сменить иконку одной программы на иконку другой
    #36022917
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, время поджимает.. Выручайте!
Ну или алгоритм который сохранит из exe'шки в ico , а уже потом тогда этим(см. выше)..
...
Рейтинг: 0 / 0
сменить иконку одной программы на иконку другой
    #36022924
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kalamfur
> Ребята, время поджимает.. Выручайте!

Да почитай уже


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
сменить иконку одной программы на иконку другой
    #36026406
kalamfur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал.. познавательно. Сам использую в этих целях axilias. Вы вопрос внимательно прочесть можете?!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сменить иконку одной программы на иконку другой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]