【发布时间】:2021-09-24 12:12:33
【问题描述】:
我正在尝试使用 pywin32 进行应用程序窗口捕获练习,以便获得窗口的确切镜像(如视频游戏)问题是 - 下面的代码继续捕获/只返回窗口的第一帧/旧帧,而不是窗口的当前帧。所以镜像中没有任何变化。我尝试更改 pywin32 不同的版本,但同样的问题。请帮忙看看代码行有什么问题
Python 版本== 3.8.10 pywin32 == 227 视窗 10
import cv2 as cv
import numpy as np
from time import time
import win32gui, win32ui, win32con
def get_screenshot(win_name):
hwnd = win32gui.FindWindow(None, win_name)
print('hwnd',hwnd)
window_rect = win32gui.GetWindowRect(hwnd)
print('window_rec',window_rect)
w = window_rect[2] - window_rect[0]
h = window_rect[3] - window_rect[1]
wDC = win32gui.GetWindowDC(hwnd)
print('wDC',wDC)
dcObj = win32ui.CreateDCFromHandle(wDC)
print('dcObj',dcObj)
cDC = dcObj.CreateCompatibleDC()
print('cDC',cDC)
dataBitMap = win32ui.CreateBitmap()
print('dataBitMap',dataBitMap)
dataBitMap.CreateCompatibleBitmap(dcObj, w, h)
cDC.SelectObject(dataBitMap)
cDC.BitBlt((0, 0), (w, h), dcObj, (0,0), win32con.SRCCOPY)
signedIntsArray = dataBitMap.GetBitmapBits(True)
img = np.fromstring(signedIntsArray, dtype='uint8')
img.shape = (h, w, 4)
dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(hwnd, wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())
img = img[...,:3]
return img
loop_time = time()
while(True):
# get an updated image of the window
frame = get_screenshot("<<Window Name>>")
cv.imshow('Computer Vision', frame)
# debug the loop rate
#print('FPS {}'.format(1 / (time() - loop_time)))
loop_time = time()
# press 'q' with the output window focused to exit.
# waits 1 ms every loop to process key presses
if cv.waitKey(1) == ord('q'):
cv.destroyAllWindows()
break
【问题讨论】:
标签: python window pywin32 screen-capture