为什么这个ctypes代码不能使用Python 3.3,但是可以使用Python 2.7?

时间:2014-12-31 20:53:38

标签: python c python-3.x windows-7 ctypes

所以我正在尝试使用ctypes模块创建一个Python 3.3程序来更改Windows桌面背景。我在Python 2.7中测试了以下代码,它运行得很好。但它只适用于Python 3.3!我正在使用Windows 7.这是代码:

import ctypes
SPI_SETDESKTOPWALLPAPER=20
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKTOPWALLPAPER, 0,"C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg", 3)

1 个答案:

答案 0 :(得分:8)

SystemParametersInfoA需要一个8位ANSI编码的输入字符串作为参数,在Python中称为mbcs编码。

您必须在python3中使用SystemParametersInfoW。这是因为SystemParametersInfoW接收UTF-16宽字符串(C中为wchar_t *),ctypes库自动将此传递的unicode参数转换为c_wchar_p

有关详细信息,请参阅documentation