如何使用pywin32在Python中获取特定应用程序窗口的句柄?

如何使用pywin32在Python中获取特定应用程序窗口的句柄?,python,pywin32,win32gui,Python,Pywin32,Win32gui,我试图修改一些Python代码,这些代码拍摄了Windows10中特定应用程序窗口的屏幕截图。为此,我尝试使用pywin32包中的Win32 UI/Win32 GUI模块。以下是被破坏的代码: def getWindow(): name = "Windows PowerShell" window = win32ui.FindWindow(None, name) windowDC = win32gui.GetWindowDC(window) 最后一行导致错误。以下是控制台

我试图修改一些Python代码,这些代码拍摄了Windows10中特定应用程序窗口的屏幕截图。为此,我尝试使用pywin32包中的Win32 UI/Win32 GUI模块。以下是被破坏的代码:

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确实是输出类型

另一方面,这些非常相似的代码行来自一个确实有效的函数:

下面是win32gui.GetDesktopWindow的示例。如果前面显示的错误消息没有特别提到PyHANDLE,我只会假设FindWindow和GetDesktopWindow返回不同且不兼容的类型

有人能帮我理解这个错误消息的含义以及它出现的原因吗?我还对示例代码感兴趣,该代码为名为Windows Powershell的窗口获取设备上下文,正如我的错误代码所尝试的那样

其他资料: 对于win32gui.GetWindowDC

您可以使用EnumWindows,这将搜索所有窗口,并在以下位置读取:


谢谢,在做了一些小的调整之后,我能够将您的函数输出插入win32gui.GetWindowDC。
    hwin = win32gui.GetDesktopWindow()
    hwindc = win32gui.GetWindowDC(hwin)
import win32gui

def getShell():
    thelist = []
    def findit(hwnd,ctx):
        if win32gui.GetWindowText(hwnd) == "Windows PowerShell": # check the title
            thelist.append(hwnd)

    win32gui.EnumWindows(findit,None)
    return thelist

b = getShell()
print(b) # b is the list of hwnd,contains those windows title is "Windows PowerShell"