PDA

Ver la Versión Completa : Cambiar wallpaper en windows xp


diegohdv
10-05-2005, 18:29:12
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.