2009-12-18 2 views

ответ

4

Я просто попытался его с D2007 на XP (а также D2009 на Vista), и этот код работает.
Но поймать Если и почему он не работает, вы должны проверить код результата и получить ошибку из 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. 
0

Вы можете проверить этот питон скрипт: http://gaze.svn.sourceforge.net/viewvc/gaze/trunk/implementation/src/gazelib/os_interface.py?view=markup

Это метод питон, который делает всю магию. Он изменяет несколько разделов реестра, а затем вызывает системный метод для обновления обоев.

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() 
+0

WTF? это не код Delphi! – Ampere

0

Проверьте код VB here, это может дать вам ключ.

SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, imageLocation, SPIF_UPDATEINIFILE Или SPIF_SENDWININICHANGE)

0

Это должно работать

Procedure TForm1.Button1Click(Sender: TObject); 
var 
    PicPath : string; 
begin 
    PicPath := 'C:\test.bmp'; 
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(PicPath), SPIF_SENDWININICHANGE); 
end; 
Смежные вопросы