【发布时间】:2017-06-07 06:42:58
【问题描述】:
我使用this帖子中提供的解决方案从Python更改Windows桌面壁纸
特别是这里的代码示例
import ctypes
import os
image_file = "myimage.jpg"
print("Setting the wallpaper")
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, os.path.abspath(image_file) , 0)
问题在于更改是非持久性的,因为每当我重新启动 PC 时桌面壁纸都会重置。如何通过 Python 持久更改 Windows 桌面壁纸?
我使用 python 3.5
【问题讨论】:
-
这不是您的直接问题,但请使用
user32 = ctypes.WinDLL('user32', use_last_error=True)而不是ctypes.windll.user32。检查是否成功,如果不是raise ctypes.WinError(ctypes.get_last_error()),以便调用者可以处理异常,而不是盲目地假装一切正常。 -
至于眼前的问题,您应该能够通过阅读
SystemParametersInfo的fWinIni参数的文档在几秒钟内解决这个问题。 -
@eryksun 你是对的,但我在哪里可以找到 SPIF_UPDATEINIFILE 的值?文档 (msdn.microsoft.com/en-us/library/ms724947) 没有提供它,但它提供了 SPI_SETDESKWALLPAPER 的值。在
winuser.h中,它被定义为等于 1。假设这个值在未来的版本中永远不会改变,尽管它没有在文档中指定,这是否正确? -
是的,如果有的话,请始终使用 Windows 标头中的常量、函数声明和结构定义。在线文档是一个起点,但它们在某些细节上往往是错误的。
标签: python windows python-3.x ctypes wallpaper