![]() |
Cambiar wallpaper en windows xp
Hola a todos; como este es mi primer mensaje en este foro creo que lo correcto seria que me presente, mi nombre es Diego, soy de Argentina. Estoy empezando a incursionar en la programacion en delphi y estaba tratando de hacer una aplicacion que cambie el wallpaper de windows, he conseguido que me funcione a medias, ya que solo me cambia el fondo si reinicio la maquina. Al ejecutar la aplicacion lo unico que consigo es dejar el fondo en azul y nada mas. Espero puedan ayudarme. Desde ya muchisimas gracias.
Este es el codigo que he escrito para tal motivo: //********************Busca información en el sistema procedure busca_info(var user:string; var ruta:string); var buffer:array[0..255] of char; tamano:dword; Reg:TRegistry; begin tamano:=256; GetUserName(buffer,tamano); user:=buffer; Reg:=TRegistry.Create; Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False); ruta:=Reg.ReadString('Local Appdata'); Reg.Free; end;//de busca_info //******************** //********************Copia Archivos al disco procedure copia_archivo(); var ruta:string; usuario:string; caracter:char; begin busca_info(usuario,ruta); caracter:=ruta[1]; FileSetAttr(ruta+'\Microsoft\wallpaper1.bmp',32); copyfile(Pchar(caracter+':\windows\wallpaper1.bmp'),Pchar(ruta+'\Microsoft\wallpaper1.bmp'),False); FileSetAttr(ruta+'\Microsoft\wallpaper1.bmp',32); FileSetAttr(caracter+':\Windows\Web\Wallpaper\Fondo.jpg',32); copyfile(Pchar(caracter+':\windows\fondo.jpg'),Pchar(caracter+':\Windows\Web\Wallpaper\Fondo.jpg'),F alse); end;//de copia_archivo //******************** //********************Modifica registro de windows procedure modif_registro(); var Reg:TRegistry;//Puntero al registro usuario:string; ruta:string; caracter:char; begin busca_info(usuario,ruta); caracter:=ruta[1]; Reg:=TRegistry.Create; Reg.OpenKey('Control Panel\Desktop',False); Reg.WriteString('ConvertedWallpaper',caracter+':\windows\Web\Wallpaper\Fondo.jpg'); Reg.WriteString('WallpaperStyle','2'); Reg.WriteString('TileWallpaper','0'); Reg.WriteString('Wallpaper',ruta+'\Microsoft\Wallpaper1.bmp'); Reg.WriteString('OriginalWallpaper',ruta+'\Microsoft\Wallpaper1.bmp'); Reg.Free; end; //******************** procedure SetWallpaper(Filename: TFilename; Mosaico: boolean); var sTiled: string; begin copia_archivo(); modif_registro(); SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(Filename), SPIF_UPDATEINIFILE); end; procedure TForm1.Button1Click(Sender: TObject); var ruta:string; usuario:string; begin SetWallpaper('c:\windows\web\wallpaper\fondo.jpg', true); end; Explico un poquito que hace cada cosa asi lo pueden seguir mas rapido. Es conveniente que explique que lo hise asi porque cambio el fondo desde windows y verifique que estos son los cambios qeu se realizan. El procedimiento busca_info busca cual es el usario corriente ya que en el registro debo modificar una calve en la que necesito saber cual es el usuario. El procedimiento modif_registro es el que me modifica las claves necesarias en el registro. El procedimiento copia_archivos copia los archivos necesarios en el lugar correto como si el cambio lo hubiese echo windows (o al menos eso creo yo) Esta funcion "SystemParametersInfo" la encontre buscando en internet, pero lo mismo no me funciona, sigo teniendo que reinicar la maquina para que me tome los cambios. Espero puedan ayudarme, y si me complique demasiado acepto criticas, desde ya muchisimas gracias. |
La franja horaria es GMT +2. Ahora son las 06:57:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi