在系统中为用户更改Python中的壁纸

时间:2013-01-20 16:18:36

标签: 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时,但是当我作为SYSTEM运行exe时,当前用户背景不会改变。

这是可以预料到的。但我不知道如何解决它。

顺便说一下,如果您的任何解决方案改变了当前用户背景或所有用户的背景,这都无关紧要。

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

如何在注册表中创建值键:

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,然后为此值键入您喜欢的任何名称。

右键点击这个新值,然后在Modify字段中选择Data Value,写一下:

"C:\Python26\pythonw.exe" "C:\Path\To\SetDesktopBackground.py"

要测试它,请注销并再次登录。此用户登录时背景应该会改变。

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

#!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)