【问题标题】:Change wallpaper in Python for user while being system在系统中为用户更改 Python 中的墙纸
【发布时间】:2013-01-03 18:57:10
【问题描述】:

我想要做的是更改 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时,当前用户背景不会改变。

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

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

感谢您的宝贵时间。

【问题讨论】:

  • 你不应该使用from ... import *,它不是一种很好的编码风格,比如在调试时等等。如果代码中没有定义变量,则需要搜索模块..
  • @paddila 我更改了代码,所以我不再使用 from ... import *。结果还是一样。
  • 我提供了类似 SO 问题的示例答案。 change desktop background

标签: python windows system ctypes wallpaper


【解决方案1】:

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

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)

【讨论】:

  • __file__ 在 py2exe 生成的可执行文件中不起作用。可以改用sys.argv[0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多