Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-07-2005
tiel tiel is offline
Miembro
 
Registrado: jul 2003
Ubicación: México, D.F.
Posts: 29
Poder: 0
tiel Va por buen camino
Question Cambiar iconos del escritorio de Windows

Me he estado preguntando... ¿mediante la API es posible cambiar los iconos del escritorio de Windows? Pero más específicamente cambiar los iconos de 'Mi PC', 'Papelera', por otros que yo defina.

Agradecería que alguien me explicara como se lograría esto, he estado 'jugando' con la API, usando el Handle del escritorio manejado como ListView, y usando varias funciones como ListView_SetImageList y ListView_SetItem, pero no he logrado nada, agradecería mucho si alguien me proporcionara información al respecto.
__________________
“Daría todo lo que sé por la mitad de lo que ignoro”
Responder Con Cita
  #2  
Antiguo 03-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En este artículo de CodeCentral se ofrece lo que parece la solución a tu cuita, a lo menos parcialmente. Puede ser un comienzo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 03-07-2005
tiel tiel is offline
Miembro
 
Registrado: jul 2003
Ubicación: México, D.F.
Posts: 29
Poder: 0
tiel Va por buen camino
Creo que no

Ya leí el artículo y más bien te explican como cambiar el icono de una carpeta basado en el Desktop.ini, pero no inidica la manera de cambiar los iconos del escritorio, que es lo que busco.

Gracias.
__________________
“Daría todo lo que sé por la mitad de lo que ignoro”
Responder Con Cita
  #4  
Antiguo 03-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No solamente lo explican, se puede descargar un ejemplo y funciona, pero, es verdad, no es del todo lo que buscas. Buscando en Google encuentras el modo de cambiar el icono de la papelera de reciclaje, y, si es la única manera de hacerlo (parece haber unanimidad) y hay que hacer lo propio con el icono "Mi PC" (del cual no encontré referencia alguna, bien es verdad que Internet da para más) digo, me parece una chapuza.

Se trata (como podrás comprobar si echas un vistazo a los resultados de Google) de cambiar cierta información del Registro de Windows: en alguna página se dice que va bien en todas las versiones de Windows desde la 95 en adelante: lo cierto es que aquí en Windows XP la clave que hay que utilizar existe, tal como proponen. Es una GUID (¿Global Unique Identifier?) y no sé hasta qué punto querrás meter mano al asunto por ahí.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-07-2005 a las 01:04:48. Razón: (corrección del texto)
Responder Con Cita
  #5  
Antiguo 03-07-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec
me parece una chapuza.
¿Por qué te parece una chapuza? En algún lugar debe guardarse la información del icono que se va a usar ¿no? ¿Y qué mejor lugar que el registro de Windows?

Para el icono de Mi PC intenten con la clave

{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon

// Saludos
Responder Con Cita
  #6  
Antiguo 03-07-2005
tiel tiel is offline
Miembro
 
Registrado: jul 2003
Ubicación: México, D.F.
Posts: 29
Poder: 0
tiel Va por buen camino
OK, ya todo claro

Bueno, muchísimas gracias por sus pistas, ya encontré la clave de registro a donde se guardan los settings de los iconos del escritorio, en HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID

Pero ahora tengo otra duda, quisiera saber cómo puedo 'actualizar' el escritorio sin tener que reiniciar la sesión, porque cuando hago los cambios en el registro tengo que reiniciar sesión para ver los iconos cambiados.

Les agradecería mucho si me contestaran esta nueva duda.
__________________
“Daría todo lo que sé por la mitad de lo que ignoro”
Responder Con Cita
  #7  
Antiguo 03-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por roman
¿Por qué te parece una chapuza? En algún lugar debe guardarse la información del icono que se va a usar ¿no? ¿Y qué mejor lugar que el registro de Windows?
Pues no sé roman, seguramente no utilizé la palabra adecuada, porque, efectivamente, en algún lugar hay que guardar la información precisa en este caso.

Sin embargo, creo que el uso de GUIDs en este caso se me ha atragantado. No sé, es como si por algún tipo de prejuicio me hubiera dicho "eso no puede funcionar siempre, esa clave será distinta en otro ordenador", pero, ya veo que tal vez esté equivocado.

De todos modos, me sigue pareciendo una chapuza. Quiero decir que si yo quiero encontrar dónde está el Software que tiene instalado el usuario puedo usar la clave "Software" de "HKCU", algo intuitivo, aunque no siempre tan sencillo, pero, ahora resulta que si quiero cambiar el icono del escritorio tengo que buscar la clave "{20D04FE0-3AEA-1069-A2D8-08002B30309D}"...

Y sí, lo cierto es que esa clave existe, esto es, que así habrán de hacerse las cosas, pero, me cierro en banda en este caso: me sigue pareciendo una especie de chapuza (narices, no encuentro la palabra), una cosa, digamos, que podría hacerse de otro modo.

Pero supongo que no será tan sencillo: imagina que en el registro de Windows tuviera que haber claves "con nombres" para todo... realmente la cosa se complicaría y mucho con tanta información: así pues el uso de GUIDs puede ser la solución, en lugar de la chapuza hallada.

A mí, roman, desde luego, no me funciona cambiar ningún dato de la clave que has propuesto para "Mi PC", y, sin embargo, puedo cambiar el texto del icono "Mi PC" desde otra clave, pero solo el texto, no así el icono, el cual se niega a cambiarse.

Por otro lado, habrás visto que en el registro de Windows en más de una y más de dos claves se encuentra un "Mi PC" con subclaves que aparentemente pueden usarse para cambiar el texto, el "hint" y el icono del mencionado elemento... ¿cuál elegir?

Así pues, no digo que sea una chapuza, lo retiro, pero, desde luego, habrán de saberse varias particularidades del registro de Windows en relación con este caso para adentrarse en algo así, como no sea que lo que queramos hacer sea un programa de uso particular, que, al cabo, funcionando en nuestro ordenador pueda valer.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-07-2005 a las 16:11:54. Razón: (corrección del texto)
Responder Con Cita
  #8  
Antiguo 03-07-2005
tiel tiel is offline
Miembro
 
Registrado: jul 2003
Ubicación: México, D.F.
Posts: 29
Poder: 0
tiel Va por buen camino
Mira

Bueno, la verdad es que quizá estás equivocado dec porque si yo modifico el valor de la clave HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon en el registro de Windows, sí me cambia el icono de 'Mi PC', pero sólo hasta que se reinicia la sesión de mi usuario, tal vez sea cuestión de la versión de Windows que estés usando.

Y ya porfavor dejen de discutir si es una chupaza o lo que sea.

Ahora, lo que me interesa es lograr que se actualizen los iconos del escritorio sin que tenga que reiniciar sesión, alguien me puede decir ¿cómo podría lograr esto?
__________________
“Daría todo lo que sé por la mitad de lo que ignoro”
Responder Con Cita
  #9  
Antiguo 03-07-2005
tiel tiel is offline
Miembro
 
Registrado: jul 2003
Ubicación: México, D.F.
Posts: 29
Poder: 0
tiel Va por buen camino
Listo

Bueno, respecto al mensaje anterior, ya encontré la manera, lo saqué de una página con un ejemplo en C++ usando la API para simular la tecla 'F5'.

http://www.codeproject.com/system/co...sh_desktop.asp

Y lo implementé de la siguiente manera:

Código:
var
   Desktop_handle: THandle;
   res: Cardinal;
   reg: TRegistry;
   icon_size: String;
begin

   Desktop_handle := FindWindow('Shell_traywnd', nil);

   SendMessage(desktop_handle, WM_SETREDRAW, 0, 0);

   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_CURRENT_USER;
   Reg.OpenKey('Control Panel\Desktop\WindowMetrics', false);
   icon_size := Reg.ReadString('Shell Icon Size');
   Reg.WriteString('Shell Icon Size', IntToStr( StrToInt(icon_size)+1 ) );

   SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE,SPI_SETNONCLIENTMETRICS, 0,SMTO_ABORTIFHUNG, 100000, res);

   Reg.WriteString('Shell Icon Size', icon_size);
   Reg.closekey;
   Reg.Free;

   SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE,SPI_SETNONCLIENTMETRICS, 0,SMTO_ABORTIFHUNG, 100000, res);


   SendMessage(desktop_handle, WM_SETREDRAW, 1, 0);

end;
Muchas gracias a todos
__________________
“Daría todo lo que sé por la mitad de lo que ignoro”
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:31:35.


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
Copyright 1996-2007 Club Delphi