TypeError: The object is not a PyHANDLE object

TypeError: The object is not a PyHANDLE object
能指点下么,照着打也出问题,这个怎么解决

import time
import numpy as np
from PIL import ImageGrab

import win32gui, win32ui, win32con, win32api

from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import *
import win32gui
import sys

import pyautogui
import cv2

def my_print(_obj, _obj_name=''):
    print(f'\n{_obj_name}:\n{_obj}\n')


hwnd_title = dict()


def get_all_hwnd(hwnd, mouse):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
        hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})

win32gui.EnumWindows(get_all_hwnd, 0)
for h, t in hwnd_title.items():
        if t is not "":
            print(h, t)


def grab_screen_win32_v2(window_title, grab_rect=None):
    hwnd = 0  # 窗口的编号,0号表示当前活跃窗口
    hwnd = win32gui.FindWindow(None, window_title)
    if hwnd ==0:
        print(f'{window_title} 窗口没有找到,请检查窗口名字是否正确')
    # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
    hwndDC = win32gui.GetWindowDC(hwnd)
    # 根据窗口的DC获取mfcDC
    mfcDC = win32ui.CreateDCFromHandle(hwndDC)
    # mfcDC创建可兼容的DC
    saveDC = mfcDC.CreateCompatibleDC()
    # 创建bigmap准备保存图片
    saveBitMap = win32ui.CreateBitmap()
    x, y, w, h = (0, 0, 100, 100)
    if grab_rect is None:
        # 获取监控器信息
        MoniterDev = win32api.EnumDisplayMonitors(None, None)
        w = MoniterDev[0][2][2]
        h = MoniterDev[0][2][3]
        # print w,h   #图片大小
        # 为bitmap开辟空间
        saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
        # 高度saveDC,将截图保存到saveBitmap中
        saveDC.SelectObject(saveBitMap)
    else:
        x, y, w, h = grab_rect
        saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
        saveDC.SelectObject(saveBitMap)

    # 截取从左上角(00)长宽为(w,h)的图片
    saveDC.BitBlt((0, 0), (w, h), mfcDC, (x, y), win32con.SRCCOPY)
    signed_ints_array = saveBitMap.GetBitmapBits(True)
    img = np.frombuffer(signed_ints_array,dtype="uint8")
    img.shape = (h, w, 4)
    img = cv2.cvtColor(img,cv2.COLOR_RGBA2RGB)

    win32gui.DeleteObject(saveBitMap.GetHandle)
    mfcDC.DeleteDC()
    saveDC.DeleteDC()
    # saveBitMap.SaveBitmapFile(saveDC, 'grab_win32.jpg')

    return img




def main():
    pass
    while True:
        img = grab_screen_win32_v2(window_title='吃鸡外挂-教学.txt - 记事本')

        cv2.imshow('grab_win32',img)
        cv2.waitKey(1)

if __name__ == '__main__':
    main()


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^