gpt4 book ai didi

python - 从 ctypes windll 获取错误信息

转载 作者:可可西里 更新时间:2023-11-01 10:05:27 27 4
gpt4 key购买 nike

我正在尝试使用 Python 脚本更改 Windows 7 计算机上的墙纸。如果重要的话,我会从 node-webkit 应用程序调用脚本。

缩短后的脚本如下所示:

# ...
result = ctypes.windll.user32.SystemParametersInfoA(20, 0, path, 0)

通常,它会起作用,但有时,似乎是随机的,它却不起作用。除了状态代码(0 或 1)之外,我有什么方法可以检索有关错误的更多信息?

我一直在尝试使用 GetLastError,它有时会在 ctypes 库中被提及,但无法提取任何错误信息。

最佳答案

ctypes 文档建议使用 use_last_error=True 以安全的方式捕获 GetLastError()。请注意,您需要在引发 WinError 时检索错误代码:

from ctypes import *

SPI_SETDESKWALLPAPER = 0x0014
SPIF_SENDCHANGE = 2
SPIF_UPDATEINIFILE = 1

def errcheck(result, func, args):
if not result:
raise WinError(get_last_error())

user32 = WinDLL('user32',use_last_error=True)
SystemParametersInfo = user32.SystemParametersInfoW
SystemParametersInfo.argtypes = [c_uint,c_uint,c_void_p,c_uint]
SystemParametersInfo.restype = c_int
SystemParametersInfo.errcheck = errcheck

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,r'xxx',SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)

输出:

Traceback (most recent call last):
File "C:\test.py", line 17, in <module>
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,r'c:\xxx',SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)
File "C:\test.py", line 9, in errcheck
raise WinError(get_last_error())
FileNotFoundError: [WinError 2] The system cannot find the file specified.

所有这些工作的替代方法是使用 pywin32并调用 win32gui.SystemsParametersInfo

关于python - 从 ctypes windll 获取错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com