【发布时间】:2020-04-11 03:35:55
【问题描述】:
我正在尝试修改一些 Python 代码,以在 Windows 10 中截取特定应用程序窗口的屏幕截图。为此,我正在尝试使用 pywin32 包中的 win32ui / win32gui 模块。这是损坏的代码:
def getWindow():
name = "Windows PowerShell"
window = win32ui.FindWindow(None, name)
windowDC = win32gui.GetWindowDC(window)
最后一行导致错误。以下是控制台输出的相关部分:
File ".\fake_file_name.py", line 9, in getWindow
windowDC = win32gui.GetWindowDC(window)
TypeError: The object is not a PyHANDLE object
我对 Python 的类型系统或错误消息不是很熟悉,但是这个错误使 GetWindowDC 看起来像是在期待一个类型为 PyHANDLE 的参数。 The documentation 我可以找到 win32gui.FindWindow 使它看起来像 PyHANDLE 确实是输出类型。
另一方面,这些非常相似的代码行来自一个确实工作的函数:
hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
这是doc page 的win32gui.GetDesktopWindow。如果前面显示的错误消息没有特别提到PyHANDLE,我会假设FindWindow 和GetDesktopWindow 返回不同且不兼容的类型。
谁能帮我理解这条错误消息的含义以及它出现的原因?我也会对获取名为“Windows Powershell”的窗口的设备上下文的示例代码感兴趣,就像我的损坏代码试图做的那样。
其他信息:
Documentation page 为win32gui.GetWindowDC
【问题讨论】: