Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar icono escritorio con InnoSetup (https://www.clubdelphi.com/foros/showthread.php?t=53604)

Troffed 25-02-2008 14:56:02

Cambiar icono escritorio con InnoSetup
 
Hola a todos, tengo un instalador hecho con InnoSetup que instala una actualización de un programa, lo hace todo perfecto menos el cambiar el icono del acceso directo del escritorio.

Lo curioso del caso es que si después de instalar la actualización cambio los colores del escritorio si que se refresca el icono.

He probado a reiniciar el S.O. después de la instalación, ha cambiarle el nombre al acceso directo, a eliminar (desde el InnoSetup) el icono antes, pero nada, no lo consigo.

Para vuestra información estoy utilizando el InnoSetup 4.2.0, tengo pendiente actualizar a la 5.2, pero en este punto del desarrollo no quisiera introducir novedades.

Aquí dejo la parte del script que estoy utilizando donde se crea el icono:

Código:

[Files]
Source: ..\..\datos\Varios\Logos\Icono.ico; DestDir: {app}; Flags: ignoreversion
Source: ..\..\datos\ejecutables\{#PGEdicion}\{#PGGoldPlatinum}\photogestion.exe; DestDir: {app}; Flags: ignoreversion overwritereadonly
Source: ..\..\datos\varios\reports\*.*; DestDir: {app}\Reports; Flags: ignoreversion overwritereadonly
#include "includes\ayuda.iss"
#include "includes\DLLs.iss"

[Icons]
Name: {userdesktop}\PhotoGestion; Filename: {app}\PhotoGestion.exe; IconFilename: {app}\Icono.ico; IconIndex: 0; WorkingDir: {app}

No es que sea de vital importancia, pero ya que hemos cambiado el icono del programa me gustaría que los usuarios que se actualicen lo vean.

Muchas gracias.

dec 25-02-2008 15:51:01

Hola,

Si entendí bien se trata de actualizar el escritorio, de modo que se muestre el nuevo icono. No sé si funcionará, pero, es posible usar cierta función de Zarko Gajic desde Inno Setup. En la sección "CODE" del "script" de Inno Setup copia lo siguiente:

Código Delphi [-]
[code]

// Constantes that we need

const
  VK_F5 = 116;
  WM_KEYUP = $0101;
  WM_KEYDOWN = $0100;

// External Win32 API functions declarations

function FindWindow(className, windowName: PChar): Integer;
 external 'FindWindowA@user32.dll stdcall';

function FindWindowEx(Parent, Child: Integer; className, windowName: PChar): Integer;
 external 'FindWindowExA@user32.dll stdcall';

// Procedure to refresh the Windows desktop

procedure RefreshDesktop;
var
  hDesktop: Integer;
begin
  hDesktop := FindWindowEx(FindWindowEx(
    FindWindow('Progman', 'Program Manager'), 0,
     'SHELLDLL_DefView', ''), 0, 'SysListView32', '') ;
  PostMessage(hDesktop, WM_KEYDOWN, VK_F5, 0) ;
  PostMessage(hDesktop, WM_KEYUP, VK_F5, 1 shl 31) ;
end;

// Procedure that Inno Setup call when installation end

procedure DeinitializeSetup();
begin
  RefreshDesktop();
end;

Troffed 25-02-2008 17:04:52

Voy a provarlo y comento algo.

Gracias.

Troffed 25-02-2008 17:30:47

Pues no ha funcionado :(

Aunque me has dado una idea, voy a buscar si el API de Windows tiene algo para fozar el cambio de icono de un enlace directo.

Continuará .... ;)

dec 25-02-2008 17:30:53

Hola,

De todas formas hay una función del API de Windows que sirve para hacerle saber al sistema de ciertos cambios... dicha función es "SystemParametersInfo()", y, siempre sería posible ejecutarla desde Inno Setup. Si bien tendrías que mirar en su ayuda para ver cómo declararla.

Aunque he sido yo mismo quien ha propuesto otra solución, no dejaría de mirar esta otra que digo, puesto que, al fin y al cabo, lo que hace la función de Zarko es "enviar la tecla F5" a la ventana del escritorio de Windows... tal vez esto no sea muy elegante si puede hacerse de otra forma. Digo yo.

PD. Aquí un ejemplo de llamada a dicha función cuando se ha cambiado el "papel tapiz" del escritorio, por ejemplo:

Código Delphi [-]
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
  Pchar(archivoBmp), SPIF_UPDATEINIFILE or SPIF_SENDCHANGE);

Troffed 25-02-2008 18:09:48

Al final he encontrado una solución, que por simple, no se me había ocurrido antes: Eliminar el .LNK al empezar a instalar

Código:

[InstallDelete]
Name: {userdesktop}\PhotoGestion.lnk; Type: files

¡¡¡¡ SOLUCIONADO !!!!

Gracias de todas formas.


La franja horaria es GMT +2. Ahora son las 05:01:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi