Заменить иконку любого экзешника

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SBJocker
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 19.01.2004 (Пн) 16:57

Заменить иконку любого экзешника

Сообщение SBJocker » 01.02.2004 (Вс) 23:49

Вобщем есть компилятор пихайщий свою иконку в exe-файл готовой проги, возможностью её менять он нерасполагает.. Задача: сделать надстройку которая при компиляции запихает в него нужную иконку из *.ico файла. Как ресурс заменить нашел, но вот просто прочитать данные из файла иконки и запихнуть в exe - неработает, как получить из иконки необходимые данные для записи в ресурсы?

acoustic
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 09.12.2003 (Вт) 17:30

Сообщение acoustic » 03.02.2004 (Вт) 13:56

VB6 тоже свою иконку пихает :)
Я ResHacker'ом обычно режу :wink:

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

PE Explorer

Сообщение hCORe » 03.02.2004 (Вт) 14:48

PE Explorer 1.90 или Resource Tuner - вот настоящий ruleZZZ...
(это мое личное мнение :wink: )
Моду создают модоки, а распространяют модозвоны.

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.02.2004 (Вт) 15:24

acoustic писал(а):VB6 тоже свою иконку пихает :)
Я ResHacker'ом обычно режу :wink:


ВБ пихает иконку по умолчанию, только если на форме не установлена иконка и не выбрана форма в качестве "иконку несущей" :)
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 03.02.2004 (Вт) 16:35

Вообщем ,если никто не знает как это сделать программно, то я напишу.
Я вообщем знаю как поместить иконку 32х32 256 цветов.
Код такой:
Код: Выделить всё
H = BeginUpdateResource(exepath, False)
Dim B() As Byte
ReDim B(0 To FileLen(icopath) - 1)
Open icopath For Binary As #1
Get #1, , B()
Close #1
Call UpdateResource(H, RT_ICON, 30001, 0, B(22), UBound(B) - 21)
Erase B
ReDim B(0 To FileLen(headerpath) - 1)
Open headerpath For Binary As #1
Get #1, , B()
Close #1
Call UpdateResource(H, RT_GROUP_ICON, 1, 0, B(0), 20)
Call EndUpdateResource(H, False)

Вроде работает.Вот прогу посмотри Блокировщик ЕХЕ-шников(http://bbs.vbstreets.ru/viewtopic.php?t=5502). Там именно так и реализовано.
Вот тут я выложу header для иконок 32х32 256.Для других иконок (особенно мультиформатных) я пока не делал.И еще BeginUpdate Resource работает лиш на NT системах. :(
Вложения
32x32(256).zip
Header
(151 байт) Скачиваний: 58

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.02.2004 (Вт) 16:56

Ага, всё ясно, хе-хе... Эти функции работают начиная с win2k!
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vitas123
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 02.09.2005 (Пт) 16:59

проблема с RT_GROUP_ICON RT_ICON.

Сообщение vitas123 » 07.09.2005 (Ср) 19:43

У меня проблема с RT_GROUP_ICON RT_ICON.
Эти переменные пустые, вследствие чего получается какая то шняга.[/img]

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.09.2005 (Ср) 23:13

:lol: некрофил-приколист?
Код: Выделить всё
Private Const RT_ICON = 3&
Private Const RT_GROUP_ICON = 14&
Изображение

vitas123
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 02.09.2005 (Пт) 16:59

Сообщение vitas123 » 08.09.2005 (Чт) 0:00

Код: Выделить всё
Private Declare Function BeginUpdateResource& Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal _
bDeleteExistingResources As Long)
Private Declare Function UpdateResource& Lib "kernel32" Alias "UpdateResourceA" (ByVal _
      hUpdate As Long, ByVal lpType As String, ByVal lpName As String, ByVal _
      wLanguage As Long, lpData As Any, ByVal cbData As Long)
Private Declare Function EndUpdateResource& Lib "kernel32" Alias "EndUpdateResourceA" _
      (ByVal hUpdate As Long, ByVal fDiscard As Long)

Private Const RT_ICON = 3&
Private Const RT_GROUP_ICON = 14&

Private Sub Form_Load()
    exepath = "c:\project1.exe"
    icopath = "c:\1.ico"
    headerpath = "c:\32x32(256).header"

    H = BeginUpdateResource(exepath, False)
    Dim B() As Byte
    ReDim B(0 To FileLen(icopath) - 1)
        Open icopath For Binary As #1
        Get #1, , B()
        Close #1
    Call UpdateResource(H, RT_ICON, 30001, 0, B(22), UBound(B) - 21)
    Erase B
    ReDim B(0 To FileLen(headerpath) - 1)
        Open headerpath For Binary As #1
        Get #1, , B()
        Close #1
    Call UpdateResource(H, RT_GROUP_ICON, 1, 0, B(0), 20)
    Call EndUpdateResource(H, False)
End Sub



В чём тут косяк? В итоге вот что получается:
Появляются две папки "14" и "3"
а "Icon" не меняется.
Прошу прощения заранее за моё ламерство:))

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.09.2005 (Чт) 2:55

vitas123 писал(а):
Код: Выделить всё
ByVal lpType As String

OMFG... Ну и чего же ты хочешь с таким объявлением? ;-)

Казалось бы, всё только что разжевали: http://bbs.vbstreets.ru/viewtopic.php?t=18872 и вниз по топику.
Изображение

vitas123
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 02.09.2005 (Пт) 16:59

Сообщение vitas123 » 08.09.2005 (Чт) 22:20

Исправил, но теперь другая проблема.
И икон и гроуп икон добавляется, но значк не изменяется.
Код: Выделить всё
Private Declare Function BeginUpdateResource& Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal _
bDeleteExistingResources As Long)
Private Declare Function UpdateResource& Lib "kernel32" Alias "UpdateResourceA" (ByVal _
      hUpdate As Long, ByVal lpType As Any, ByVal lpName As String, ByVal _
      wLanguage As Long, lpData As Any, ByVal cbData As Long)
Private Declare Function EndUpdateResource& Lib "kernel32" Alias "EndUpdateResourceA" _
      (ByVal hUpdate As Long, ByVal fDiscard As Long)

Private Const RT_ICON = 3&
Private Const RT_GROUP_ICON = 14&


Private Sub Form_Load()

    exepath = "c:\3.exe"
    icopath = "c:\1.ico"
    headerpath = "c:\32x32(256).header"
   
H = BeginUpdateResource(exepath, False)
Dim B() As Byte
ReDim B(0 To FileLen(icopath) - 1)
Open icopath For Binary As #1
Get #1, , B()
Close #1
Call UpdateResource(H, RT_ICON, 1, 3081, B(22), UBound(B) - 21)
Erase B
ReDim B(0 To FileLen(headerpath) - 1)
Open headerpath For Binary As #1
Get #1, , B()
Close #1
Call UpdateResource(H, RT_GROUP_ICON, 1, 3081, B(0), 20)
Call EndUpdateResource(H, False)
End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.09.2005 (Пт) 0:20

Ты старую иконку-то убираешь? Или только новую записываешь? :-))
Изображение

vitas123
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 02.09.2005 (Пт) 16:59

Сообщение vitas123 » 09.09.2005 (Пт) 1:09

И икон и гроуп икон добавляется, но значок не изменяется.


Сорри не изменяется - а вообще пропадает.
В резхакере видно и икон, и и-гроуп, но в проводнике обычный значёк консольного приложения.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 66

    TopList  
cron