修改注册表

修改注册表

用python读写注册表,代码如下

[Copy to clipboard] [ - ]
CODE:
# 功能:换墙纸
import _winreg

key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, "Control Panel\Desktop")

_winreg.SetValueEx(key, "WallPaper", 0, _winreg.REG_SZ, r"G:\Documents and Settings\ning\Local Settings\Application Data\Microsoft\00.jpg")

错误信息如下:

QUOTE:
Traceback (most recent call last):
  File "E:\programs\读写注册表2.py", line 3, in ?
    _winreg.SetValueEx(key, "WallPaper", 0, _winreg.REG_SZ, r"G:\Documents and Settings\ning\Local Settings\Application

Data\Microsoft\00.jpg")
WindowsError: (5, '')

是不是程序的权限不够?能提升权限吗?
因为:

QUOTE:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

G:\Documents and Settings\ning>net helpmsg 5

拒绝访问。

此外,一个delphi例子上说,改注册表后重启才能生效,但可以给windows发一条内部信息,让它立即更化墙纸。
请问python可以发这样的信息吗?如何发?

python版本: 2.4 Enthought Edition
可以查一查pywin32的说明,或使用ctypes来处理。

不过我也没有做过,自已查一下吧。
ctypes第一次听说,长见识了!

网上来的代码:

[Copy to clipboard] [ - ]
CODE:
#试用ctypes
#功能:得到盘符
import ctypes as c
L = 100
a = c.c_buffer("\0"*L)
l = c.c_int32(L)
c.windll.kernel32.GetLogicalDriveStringsA(l,a)
print a.raw.strip("\0").split("\0")

网上来的代码
http://seasons.javaeye.com/blog/60294
太好了!  正是我想要的。
ctypes果然比pywin32好用。

[Copy to clipboard] [ - ]
CODE:
SPI_SETDESKWALLPAPER = 20 # According to http://support.microsoft.com/default.aspx?scid=97142
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, imagepath, 0)

多谢多谢!
好文章,收藏了。原来python自己带了这么强大的库。


QUOTE:
原帖由 niexining 于 2007-6-4 13:46 发表
太好了!  正是我想要的。
ctypes果然比pywin32好用。

SPI_SETDESKWALLPAPER = 20 # According to http://support.microsoft.com/default.aspx?scid=97142
ctypes.windll.user32.SystemParametersInfoA(SP ...

ctypes.windll.user32.SystemParametersInfoA
这种模式智能使用BMP的格式或者动态桌面做墙纸,无法使用jpg,gif,等来做,最好的办法还是使用win32或者CTYPES