Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Jeezy en 26 Mayo 2018, 22:38 pm



Título: Cambiar Icono
Publicado por: Jeezy en 26 Mayo 2018, 22:38 pm
Hola quisiera crear una aplicacion en el lenguaje C# para cambiarle el icono a otras aplicaciones , que tendria que hacer???


Título: Re: Cambiar Icono
Publicado por: Eleкtro en 27 Mayo 2018, 00:29 am
que tendria que hacer???

Basicamente: manipular la tabla de recursos del archivo executable en cuestión para reemplazar el archivo de icono, por otro distinto...

  • MSDN - Adding, Deleting, and Replacing Resources (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648004(v=vs.85).aspx)
  • MSDN - Enumerating Resources (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648005(v=vs.85).aspx)
  • MSDN - Resource File Formats (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648007(v=vs.85).aspx)
  • MSDN - Resource Types (https://msdn.microsoft.com/en-us/library/windows/desktop/ms648009(v=vs.85).aspx)

Es algo que requiere mucho P/Invoking, si le vas a dar poca reusabilidad al código entonces casi mejor sería preferible utilizar cualquier herramienta por linea de comandos tipo Resource Hacker.

Saludos.


Título: Re: Cambiar Icono
Publicado por: Jeezy en 27 Mayo 2018, 00:51 am
Estuve intentando usar el resource hacker pero no me cambiaba todos los iconos entonces estoy intentando hacerlo de otra forma


Título: Re: Cambiar Icono
Publicado por: Eleкtro en 27 Mayo 2018, 03:35 am
Lee las soluciones:
  • https://stackoverflow.com/questions/4127785/using-updateresource-in-c

Suponiendo que sepas el nombre o identificador del recurso de icono que quieres reemplazar, es pan comido, de lo contrario tienes que enumerar los recursos de icono (ya te indiqué la documentación de MSDN para aprender a enumerar recursos) puesto que no siempre el icono principal va a tener el mismo identificador, ni va a usar un identificador en vez de un nombre.

De todas formas siempre que utilices correctamente los parámetros de Resource Hacker no vas a tener problemas con él.



EDITO:

Es algo que requiere mucho P/Invoking, si le vas a dar poca reusabilidad al código entonces casi mejor sería preferible utilizar cualquier herramienta por linea de comandos tipo Resource Hacker.

Cuando dije de usar Resource Hacker no recordaba que existía esta librería open-source para .NET, la cual tenía guardada por ahí pero creo que nunca le llegué a usar:
  • https://github.com/resourcelib/resourcelib

Puedes descargar dicha librería y usarla tal cual, o puedes destripar del código fuente lo que no necesites y copiar de esta clase solamente las estructuras nativas o P/Invoking necesario para tus fines:

  • https://github.com/resourcelib/resourcelib/blob/master/Source/ResourceLib/Kernel32.cs
( para reemplazar un icono solo necesitas las definiciones de las funciones BeginUpdateResource, UpdateResource y EndUpdateResource; para reemplazar un grupo de iconos necesitas también usar la estructura GRPICONDIR y GRPICONDIRENTRY)

Ejemplo de uso:
  • https://github.com/resourcelib/resourcelib/wiki/Icon-(RT_ICON,-RT_GROUP_ICON) (https://github.com/resourcelib/resourcelib/wiki/Icon-(RT_ICON,-RT_GROUP_ICON))

Como ya dije creo que nunca le llegué a usar (yo hago este tipo de modificaciones con mis propios wrappers de las funciones nativas de Windows, algunas ya mencionadas), así que no puedo recomendar esa librería, pero creo que usar Resource Hacker en general debería aportar mayor seguridad contra posibles errores de cualquier tipo... simplemente por popularidad, veteranía/experiencia y profesionalidad del autor.

Saludos.