如何更改桌面壁纸?

时间:2009-12-18 17:47:09

标签: delphi api

如何更改桌面壁纸?

我试过这个

procedure TForm1.Button1Click(Sender: TObject); 
var   
  PicPath: String; 
begin 
  PicPath := 'C:\test.bmp';   
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pChar(PicPath), SPIF_SENDCHANGE) 
end;

但它没有用。

4 个答案:

答案 0 :(得分:4)

我刚试用XP上的D2007(以及Vista上的D2009),这段代码也可以使用 但要抓住If以及为什么它不起作用,你应该测试结果代码并从Windows获得错误

  if not SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pChar(PicPath), SPIF_SENDCHANGE)then
    RaiseLastOSError;

在大多数情况下,这是因为找不到bmp文件:

System Error.  Code: 2.
The system cannot find the file specified.

答案 1 :(得分:0)

你可以查看这个python脚本: http://gaze.svn.sourceforge.net/viewvc/gaze/trunk/implementation/src/gazelib/os_interface.py?view=markup

这是完成所有魔法的python方法。它会更改一些注册表项,然后调用系统方法来更新壁纸。

  103   def set_wallpaper(self, file_path) :
  104       self.__lock.acquire()
  105       # this module is part of python 2.5 by default
  106       import ctypes
  107       import _winreg
  108       reg = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, self.__REGISTRY_PATH, 0, _winreg.KEY_SET_VALUE)
  109       # First center the image and turn off tiling
  110       _winreg.SetValueEx(reg, "TileWallpaper", 0, _winreg.REG_SZ, "0")
  111       _winreg.SetValueEx(reg, "WallpaperStyle", 0, _winreg.REG_SZ, "0")
  112       # Set the image
  113       _winreg.SetValueEx(reg, "ConvertedWallpaper", 0, _winreg.REG_SZ, os.path.realpath(file_path))
  114       _winreg.SetValueEx(reg, "Wallpaper", 0, _winreg.REG_SZ, self.convert_to_bmp(file_path))
  115       _winreg.CloseKey(reg)
  116       # Notify the changes to the system
  117       func_ret_val = ctypes.windll.user32.SystemParametersInfoA(\
  118           self.__SPI_SETDESKWALLPAPER,\
  119           0,\
  120           None,\
  121           self.__SPIF_UPDATEINIFILE | self.__SPIF_SENDWININICHANGE)
  122       assert func_ret_val == 1
  123       self.__lock.release()

答案 2 :(得分:0)

检查VB代码here,它可以为您提供线索。

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,imageLocation,SPIF_UPDATEINIFILE或SPIF_SENDWININICHANGE)

答案 3 :(得分:0)

这应该有效

Procedure TForm1.Button1Click(Sender: TObject);
var
  PicPath : string;
begin
  PicPath := 'C:\test.bmp';
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(PicPath), SPIF_SENDWININICHANGE);
end;