如何解决win32gui.FindWindow - 黑屏
在编写代码时遇到问题。 win32gui.FindWindow 通过标题找到我需要的窗口,但并非所有应用程序都显示出来。例如 Steam 和 Discord - 显示黑屏,没有别的。例如,记事本应用程序 - 捕获和显示没有问题。我使用的是OpenCV库进行展示,imshow()展示了多张截图。
有什么问题?
class WindowCapture:
w = 0
h = 0
hwnd = None
cropped_x = 0
cropped_y = 0
offset_x = 0
offset_y = 0
def __init__(self,window_name=None):
if window_name is None:
self.hwnd = win32gui.GetDesktopWindow()
else:
self.hwnd = win32gui.FindWindow(None,window_name)
if not self.hwnd:
raise Exception('Window not found: {}'.format(window_name))
# Получаем размер окна.
window_rect = win32gui.GetWindowRect(self.hwnd)
self.w = window_rect[2] - window_rect[0]
self.h = window_rect[3] - window_rect[1]
# Учитывая границу окна и заголовка,обрезать их.
border_pixels = 8
titlebar_pixels = 30
self.w = self.w - (border_pixels * 2)
self.h = self.h - titlebar_pixels - border_pixels
self.cropped_x = border_pixels
self.cropped_y = titlebar_pixels
self.offset_x = window_rect[0] + self.cropped_x
self.offset_y = window_rect[1] + self.cropped_y
def get_screenshot(self):
wDC = win32gui.GetWindowDC(self.hwnd)
dcObj = win32ui.CreateDCFromHandle(wDC)
cDC = dcObj.CreateCompatibleDC()
dataBitMap = win32ui.CreateBitmap()
dataBitMap.CreateCompatibleBitmap(dcObj,self.w,self.h)
cDC.SelectObject(dataBitMap)
cDC.BitBlt((0,0),(self.w,self.h),dcObj,(self.cropped_x,self.cropped_y),win32con.SRCCOPY)
signedIntsArray = dataBitMap.GetBitmapBits(True)
img = np.fromstring(signedIntsArray,dtype='uint8')
img.shape = (self.h,4)
#dataBitMap.SaveBitmapFile(cDC,'debug.bmp')
dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(self.hwnd,wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())
img = img[...,:3]
img = np.ascontiguousarray(img)
return img
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。