FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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” |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
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” |
#4
|
||||
|
||||
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í. Última edición por dec fecha: 03-07-2005 a las 01:04:48. Razón: (corrección del texto) |
#5
|
||||
|
||||
Cita:
Para el icono de Mi PC intenten con la clave {20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon // Saludos |
#6
|
|||
|
|||
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” |
#7
|
||||
|
||||
Hola,
Cita:
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. Última edición por dec fecha: 03-07-2005 a las 16:11:54. Razón: (corrección del texto) |
#8
|
|||
|
|||
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” |
#9
|
|||
|
|||
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;
__________________
“Daría todo lo que sé por la mitad de lo que ignoro” |
|
|
|