使用BitBlt()捕获资源管理器窗口时标题栏变黑且位置偏移的问题求助
BitBlt()捕获资源管理器窗口时标题栏变黑且位置偏移的问题求助
我现在尝试通过HWND来捕获窗口画面,比如我的资源管理器窗口:
(正常显示的资源管理器界面截图)
但实际捕获得到的结果却是这样:
(标题栏变黑、画面存在位置偏移的捕获结果截图)
我使用的捕获函数如下:
import win32gui import win32ui import win32con import time from PIL import Image import cv2 import numpy as np def capture_window(hwnd): win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) win32gui.SetForegroundWindow(hwnd) time.sleep(1) window_dc = win32gui.GetWindowDC(hwnd) dc_object = win32ui.CreateDCFromHandle(window_dc) compatible_dc = dc_object.CreateCompatibleDC() left, top, right, bottom = win32gui.GetClientRect(hwnd) width = right - left height = bottom - top bitmap = win32ui.CreateBitmap() bitmap.CreateCompatibleBitmap(dc_object, width, height) compatible_dc.SelectObject(bitmap) compatible_dc.BitBlt((0, 0), (width, height), dc_object, (0, 0), win32con.SRCCOPY) bmpinfo = bitmap.GetInfo() bmpstr = bitmap.GetBitmapBits(True) img = Image.frombuffer( "RGB", (bmpinfo["bmWidth"], bmpinfo["bmHeight"]), bmpstr, "raw", "BGRX", 0, 1 ) img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB) win32gui.DeleteObject(bitmap.GetHandle()) compatible_dc.DeleteDC() dc_object.DeleteDC() win32gui.ReleaseDC(hwnd, window_dc) return img
现在遇到的问题是,捕获的画面标题栏变黑,而且画面位置还有偏移。有些窗口能正常捕获,但像资源管理器这类窗口就会出现这个问题。
我试过把代码里的win32gui.GetClientRect()改成win32gui.GetWindowRect(),但并没有解决问题。我期望能捕获到和窗口实际显示完全一致的画面,请问这个问题是什么原因导致的?该怎么解决?
备注:内容来源于stack exchange,提问作者王常友




