我正在尝试使用pywin32模块来获取窗口客户端的位图。使用this question中的确切代码,我可以得到整个桌面的位图。具体地说,当我查看返回的位时,有4*(桌面像素)个数的条目。但是,当我尝试对窗口或客户区执行类似操作时,返回的条目较少,只有像素。我获取窗口位图的代码如下。不过,我试过几种不同的方法。例如,用工作区替换窗口部件,将(nXSrc,nsrc)设置为零,等等。有什么建议可以说明我可能做错了什么?非常感谢!在
代码:
windowName = "MyProcessWindow"
windowHandle = win32ui.FindWindow(None, windowName).GetSafeHwnd()
windowRectangle = win32gui.GetWindowRect(windowHandle)
width = windowRectangle[2]-windowRectangle[0]
height = windowRectangle[3]-windowRectangle[1]
win32gui.SetForegroundWindow(windowHandle)
windowDeviceContext = win32gui.GetWindowDC(windowHandle)
deviceContextObject = win32ui.CreateDCFromHandle(windowDeviceContext)
compatibleDeviceContext = deviceContextObject.CreateCompatibleDC()
dataBitMap = win32ui.CreateBitmap()
dataBitMap.CreateCompatibleBitmap(compatibleDeviceContext, width, height)
compatibleDeviceContext.SelectObject(dataBitMap)
compatibleDeviceContext.BitBlt((0,0), (width, height), deviceContextObject, (windowRectangle[0],windowRectangle[1]), win32con.SRCCOPY)
info = dataBitMap.GetInfo()
bits = dataBitMap.GetBitmapBits(False)
print info
print len(bits)
print (width*height)
打印结果:
^{pr2}$
我认为问题在于:
你想创建一个与其他颜色兼容的位图。然后你可以选择它到目标DC中,这将赋予它适当的颜色深度、大小和其他特性。在
相反,您正在创建一个与目标DC兼容的DC,此时它是1x1黑白DC,如^{} 文档中所述。然后你把它选到目标DC中,让它和开始时一样。在
这就是为什么最终得到的位图平面为1bpp。在
请参阅Capturing a Image示例(在C中,还有很糟糕的C语言,但希望您可以遵循它)以了解如何执行此操作的示例。但我相信这是你唯一做错的一步。在
相关问题 更多 >
编程相关推荐