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

标签 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 时,当前用户背景不会改变。

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

顺便说一句,您的任何解决方案是否更改当前用户背景或所有用户的背景都没有关系。

感谢您的宝贵时间。

最佳答案

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

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

右键单击并选择新建 > 字符串值,然后为此值键入您喜欢的任何名称。

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

"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)

关于python - 在Python中为系统用户更改壁纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14426475/

相关文章:

python - 列表的交集,查找长度

c++ - 编译器之间的 qt dll 兼容性

Windows 中的 PHP shell_exec 不写入 LPT1

c++ - Windows - 在 C++ 中读取鼠标的 dpi 设置

Python 和类

python - 使用带有关键字参数的 multiprocessing.Pool.map() 函数?

python - 如何保留在 python 的数据框中重复出现的值的第一次出现?

c++ - 从 c++ system() 命令捕获缓冲区输出

JavaFX 2 - 访问Windows系统麦克风音量

c++ - 系统调用中的宏