我试图修改一些Python代码,这些代码可以截取Windows 10中特定应用程序窗口的截图。为此,我尝试使用来自 win32ui 包的pywin32 / win32gui 模块。以下是破译的代码:
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 类型的争论。我可以为 文献资料 找到的 win32gui.FindWindow 使它看起来像一个 PyHANDLE 确实是输出类型。
GetWindowDC
PyHANDLE
win32gui.FindWindow
另一方面,这些非常相似的代码行来自于一个可以工作的函数:
hwin = win32gui.GetDesktopWindow() hwindc = win32gui.GetWindowDC(hwin)
这是 doc页面 for win32gui.GetDesktopWindow 。如果前面显示的错误消息没有具体提到 PyHANDLE ,我只会假设 FindWindow 和 GetDesktopWindow 返回不同和不兼容的类型。
win32gui.GetDesktopWindow
FindWindow
GetDesktopWindow
有人能帮助我理解这个错误信息的含义以及它出现的原因吗?我还会对示例代码感兴趣,这些代码获取名为“”的窗口的设备上下文,就像我的坏代码试图做的那样。
其他信息: 文件页 for win32gui.GetWindowDC
win32gui.GetWindowDC
发布于 2020-04-11 03:45:26
您可以使用 EnumWindows() ,这将搜索所有的窗口,在 MSDN文档 中读取它
EnumWindows()
import win32gui def getShell(): thelist = [] def findit(hwnd,ctx): if win32gui.GetWindowText(hwnd) == "Windows PowerShell": # check the title thelist.append(hwnd)