Как получить дескриптор для указанного c окна приложения в Python, используя pywin32? - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь изменить код Python, который делает снимок экрана конкретного окна приложения в Windows 10. Я пытаюсь использовать для этой цели модули win32ui / win32gui из пакета pywin32. Вот неправильный код:

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 действительно является типом вывода.

С другой стороны, эти очень похожие строки кода получены из функции работает :

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

Вот do c страница для win32gui.GetDesktopWindow. Если в ранее показанном сообщении об ошибке не упоминалось PyHANDLE, я бы просто предположил, что FindWindow и GetDesktopWindow возвращают разные и несовместимые типы.

Может кто-нибудь помочь мне понять, что означает это сообщение об ошибке, и почему это появляется? Я также был бы заинтересован примером кода, который получает контекст устройства для окна с именем «Windows Powershell», как пытался сделать мой сломанный код.

Другая информация: Страница документации для win32gui.GetWindowDC

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете использовать EnumWindows(), это будет искать во всем окне, читать его в MSDN сделать c:

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"
...