在pywin32中显示位图

2024-10-02 14:21:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试截图,然后将其显示在我的窗口中

我用这段代码截图:

def captureScreen():

    hWnd = win32gui.GetDesktopWindow()

    screenLeft   = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
    screenTop    = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
    screenWidth  = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
    screenHeight = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)

    hDc = win32gui.GetWindowDC(hWnd)
    srcdc = win32ui.CreateDCFromHandle(hDc)
    memdc = srcdc.CreateCompatibleDC()
    bmp = win32ui.CreateBitmap()
    bmp.CreateCompatibleBitmap(srcdc, screenWidth, screenHeight)
    memdc.SelectObject(bmp)
    memdc.BitBlt((0, 0), (screenWidth, screenHeight), srcdc, (screenLeft, screenTop), win32con.SRCCOPY)

    return bmp

并将此代码显示在窗口上:

    if message == win32con.WM_PAINT:

        hDC, paintStruct = win32gui.BeginPaint(hWnd)

        win32gui.SelectObject(hDC, bitmap)

        rect = win32gui.GetClientRect(hWnd)

        win32gui.BitBlt(hDC, 0, 0, screenWidth, screenHeight, 0, 0, 0, win32con.SRCCOPY)

        win32gui.EndPaint(hWnd, paintStruct)

        return 0

我得到一个错误:

Traceback (most recent call last):
  File "main.py", line 63, in wndProc
    win32gui.SelectObject(hDC, bitmap)
TypeError: The object is not a PyHANDLE object 

我似乎不知道问题出在哪里。谢谢


Tags: 代码smwin32guibmpwin32apigetsystemmetricswin32conhwnd