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

问题描述 投票:0回答:1

[我正在尝试修改一些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确实是输出类型。

另一方面,这些非常相似的代码行来自does工作的函数:

    hwin = win32gui.GetDesktopWindow()
    hwindc = win32gui.GetWindowDC(hwin)

这里是doc pagewin32gui.GetDesktopWindow。如果先前显示的错误消息没有特别提及PyHANDLE,我将假定FindWindowGetDesktopWindow返回不同且不兼容的类型。

有人可以帮助我了解此错误消息的含义以及为什么出现此错误吗?我也会对示例代码感兴趣,该示例代码试图为名称为“ Windows Powershell”的窗口获取设备上下文,因为我的破断代码试图这样做。

其他信息:Documentation page代表win32gui.GetWindowDC

python pywin32 win32gui
1个回答
0
投票

您可以使用EnumWindows(),它将搜索所有窗口,在MSDN doc中读取它:

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)
© www.soinside.com 2019 - 2024. All rights reserved.