在系统运行时为用户更改Python壁纸

在系统运行时为用户更改Python壁纸,python,windows,system,ctypes,wallpaper,Python,Windows,System,Ctypes,Wallpaper,我想做的是在windows中更改桌面壁纸。 为此,我使用以下代码: import ctypes import Image pathToBmp = "PATH TO BMP FILE" SPI_SETDESKWALLPAPER = 20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, pathToBmp , 0) 当我运行.py文件时,此功能有效;当我使用py2exe转换文件并在当前用户下运行exe时

我想做的是在windows中更改桌面壁纸。 为此,我使用以下代码:

import ctypes
import Image

pathToBmp = "PATH TO BMP FILE"
SPI_SETDESKWALLPAPER = 20  
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, pathToBmp , 0) 
当我运行.py文件时,此功能有效;当我使用py2exe转换文件并在当前用户下运行exe时,此功能有效;但当我作为系统运行exe时,当前用户背景不会更改

这当然是意料之中的。但我不知道怎么解决它

顺便说一句,您的任何解决方案更改当前用户背景或所有用户背景都无关紧要


谢谢您的时间。

在注册表中创建一个值项如何:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
这将在用户登录时更改背景

若要尝试此脚本,请编写此脚本,并将其命名为例如
SetDesktopBackground.py
,任意您喜欢的地方:

#!python

from ctypes import *
from os import path

SPI_SETDESKWALLPAPER = 0x14
SPIF_UPDATEINIFILE   = 0x1

lpszImage = path.join(path.dirname(path.realpath(__file__)), 'your_image.jpg')

SystemParametersInfo = windll.user32.SystemParametersInfoA

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, lpszImage, SPIF_UPDATEINIFILE)
别忘了把一些图片,
your_image.jpg
,放在同一个目录中。然后打开注册表编辑器:

Start > Search > type regedit.exe
然后转到路径:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
右键单击并选择
New>String Value
,然后为该值键入您喜欢的任何名称

右键单击此新值并选择
修改
,在
数据值
字段中写入:

"C:\Python26\pythonw.exe" "C:\Path\To\SetDesktopBackground.py"
要测试它,请注销并再次登录。当此用户登录时,背景应该更改

这是手动方式,您可以在应用程序中使用,在安装过程中创建价值:

#!python

from _winreg import *
from sys import executable
from os import path

subkey  = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
script  = 'C:\\Path\\To\\SetDesktopBackground.py'
pythonw = path.join(path.dirname(executable), 'pythonw.exe')

hKey = OpenKey(HKEY_CURRENT_USER, subkey, 0, KEY_SET_VALUE)

SetValueEx(hKey, 'MyApp', 0, REG_SZ, '"{0}" "{1}"'.format(pythonw, script))

CloseKey(hKey)

您不应该使用来自。。。导入*,这不是一种很好的编码方式,因为在调试等过程中。如果代码中没有定义变量,则需要搜索模块。@paddila我更改了代码,因此我不使用from。。。导入*了。它仍然有相同的结果。我为类似的SO问题提供了示例答案<代码>文件在py2exe生成的可执行文件中不起作用<代码>sys.argv[0]可以改为使用。