【问题标题】:How do I set the desktop background in python? (windows)如何在python中设置桌面背景? (视窗)
【发布时间】:2016-11-13 13:57:55
【问题描述】:

这就是我正在尝试的:

import ctypes
import os
drive = "F:\\"
folder = "Keith's Stuff"
image = "midi turmes.png"
image_path = os.path.join(drive, folder, image)
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, image_path, 3)

基本上,这段代码显然应该将桌面背景设置为midi turmes.png,它改变了桌面,但是,出于某种奇怪的原因,它总是绿色背景(我在windows中的个性化设置是后面的绿色背景图片)我该如何解决这个问题并使桌面看起来像这样?:http://i.imgur.com/VqMZF6H.png

【问题讨论】:

  • 您是否尝试过使用 JPG 图片而不是 PNG?
  • Python 2 还是 3?还可以尝试为函数设置 argtypes 和 restype。
  • 是的,我试过了。我正在使用 python 3.5.2
  • 我在 shell 上玩这个。该命令似乎将背景更改为纯色,而不是使用图像(您甚至可以打开外壳旁边的背景设置并看到它实时更改)
  • 我认为这与 Windows 10 有关。我正在使用脚本,但它也不适用于我。您的代码在 SO 上出现了几个问题,但他们都和您一样使用它。由于它对我也不起作用,因此 Microsoft 可能在 Windows 10 中更改了某些内容(甚至可能是最后一次更新)

标签: python ctypes


【解决方案1】:

以下内容对我有用。我正在使用 Windows 10 64 位和 Python 3。

import os
import ctypes
from ctypes import wintypes

drive = "c:\\"
folder = "test"
image = "midi turmes.png"
image_path = os.path.join(drive, folder, image)

SPI_SETDESKWALLPAPER  = 0x0014
SPIF_UPDATEINIFILE    = 0x0001
SPIF_SENDWININICHANGE = 0x0002

user32 = ctypes.WinDLL('user32')
SystemParametersInfo = user32.SystemParametersInfoW
SystemParametersInfo.argtypes = ctypes.c_uint,ctypes.c_uint,ctypes.c_void_p,ctypes.c_uint
SystemParametersInfo.restype = wintypes.BOOL
print(SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, image_path, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE))

重要的部分是确保在使用SystemParametersInfoW 时为image_path 使用Unicode 字符串,在使用SystemParametersInfoA 时确保使用字节字符串。请记住,在 Python 3 中,字符串是默认的 Unicode。

设置argtypesrestype 也是一个好习惯。您甚至可以“撒谎”并将第三个 argtypes 参数设置为 c_wchar_pSystemParametersInfoW,然后 ctypes 将验证您传递的是 Unicode 字符串而不是字节字符串。

【讨论】:

  • 你能指出一个链接来解释到底是什么吗?多年来我一直在编写脚本来做 Windows 的事情,但这个过程总是让人感觉很随意。我尝试了一些东西,但它不起作用,然后我用谷歌搜索,直到找到一个有效的 sn-p。当我使用大多数语言执行此操作时,我实际上在学习过程中学到了一些东西,但是对于 Windows API 文档这些奇怪的名称、令人费解的方法和可怕的混乱,我无法理解它
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多