Bueno, he estado buscando en una partición vieja éste code que daba por hecho que había perdido
. Es una traducción de un code en C de Tughack para FASM que hice hace tiempo:
format PE GUI 4.0
entry start
include 'C:\fasm\include\win32ax.inc'
include 'C:\fasm\include\api\kernel32.inc'
include 'C:\fasm\include\api\user32.inc'
struct GRPICONDIRENTRY
Reserved1 dw ?
ResourceType dw ?
ImageCount dw ?
iWidth db ?
iHeight db ?
Colors db ?
Reserved2 db ?
Planes dw ?
BitsPerPixel dw ?
ImageSize dd ?
ResourceID dw ?
ends
section '.data' data readable writeable
;Proc ChangeIcon
hFileIcon dd ?
hUpdateRes dd ?
FileIconSize dd ?
Buffer dd ?
grIcon GRPICONDIRENTRY ?
BufferSize dd ?
section '.code' code readable executable
start:
;stdcall ChangeIcon,szExeFileName,szIconFileName
ret
proc ChangeIcon,nExeFile,nIconFile
invoke BeginUpdateResource,[nExeFile],TRUE
mov [hUpdateRes],eax
invoke CreateFile,[nIconFile],GENERIC_READ,0,0,OPEN_EXISTING,0,0
mov [hFileIcon],eax
invoke GetFileSize,[hFileIcon],0
mov [FileIconSize],eax
invoke GlobalAlloc,GPTR,[FileIconSize]
mov [Buffer],eax
invoke ReadFile,[hFileIcon],[Buffer],[FileIconSize],dwBytes,0
invoke CloseHandle,[hFileIcon]
add [Buffer],22
sub [FileIconSize],22
invoke UpdateResource,[hUpdateRes],RT_ICON,1,0,[Buffer],[FileIconSize]
invoke RtlZeroMemory,grIcon,22
mov [grIcon.ResourceType],1
mov [grIcon.ImageCount],1
mov [grIcon.iWidth],32
mov [grIcon.iHeight],32
mov [grIcon.Planes],2
mov [grIcon.BitsPerPixel],32
push [BufferSize]
pop [grIcon.ImageSize]
mov [grIcon.ResourceID],1
invoke UpdateResource,[hUpdateRes],RT_GROUP_ICON,1,0,grIcon,22
invoke EndUpdateResource,[hUpdateRes],FALSE
invoke GlobalFree,[Buffer]
ret
endp
section '.idata' import data readable writeable
library kernel32, 'KERNEL32.DLL',\
user32, 'USER32.DLL'
Creo recordar de funcionaba
.
Saludos
Edito: Revisando el mensaje me di cuenta de que no es lo que querías
. Para cambiar el icono de TU exe basta con meterlo en un resource. Yo utilizo Radasm o Masmed como IDE's, que tienen editor de recursos incorporado y cambias el icono con un par de clicks.