PythonPywin32获取客户端位图?

2024-10-05 12:56:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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}$

Tags: 代码条目像素width桌面printheightwin32gui
1条回答
网友
1楼 · 发布于 2024-10-05 12:56:09

我认为问题在于:

dataBitMap.CreateCompatibleBitmap(compatibleDeviceContext, width, height)

你想创建一个与其他颜色兼容的位图。然后你可以选择它到目标DC中,这将赋予适当的颜色深度、大小和其他特性。在

相反,您正在创建一个与目标DC兼容的DC,此时它是1x1黑白DC,如^{}文档中所述。然后你把它选到目标DC中,让它和开始时一样。在

这就是为什么最终得到的位图平面为1bpp。在

请参阅Capturing a Image示例(在C中,还有很糟糕的C语言,但希望您可以遵循它)以了解如何执行此操作的示例。但我相信这是你唯一做错的一步。在

相关问题 更多 >

    热门问题