gpt4 book ai didi

python - 屏幕截图 [ctypes.windll CreateDCFromHandle]

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:37 24 4
gpt4 key购买 nike

我正在创建一个仅使用纯 python (ctypes) 的屏幕截图模块,没有像 win32、wx、QT 这样的大库,...它必须管理多屏幕(PIL 和 Pillow 不能)。

我阻塞的地方是调用 CreateDCFromHandle 时,ctypes.windll.gdi32 不知道这个函数。我看了看win32的源代码,受到启发,但是没有用。正如评论中所说,MSDN 中不存在此功能,那么我应该应用哪些更改来考虑其他屏幕?

这是适用于主显示器的代码,但不适用于其他显示器:source code .它在第 35 行阻塞。我尝试了很多组合,在这里和其他网站上寻找答案。但对我来说没有任何功能......这只是一个屏幕截图!

你有线索吗?

提前致谢:)


编辑,我找到了我的赌注!这是有效的代码:

srcdc = ctypes.windll.user32.GetWindowDC(0)
memdc = ctypes.windll.gdi32.CreateCompatibleDC(srcdc)
bmp = ctypes.windll.gdi32.CreateCompatibleBitmap(srcdc, width, height)
ctypes.windll.gdi32.SelectObject(memdc, bmp)
ctypes.windll.gdi32.BitBlt(memdc, 0, 0, width, height, srcdc, left, top, SRCCOPY)
bmp_header = pack('LHHHH', calcsize('LHHHH'), width, height, 1, 24)
c_bmp_header = c_buffer(bmp_header)
c_bits = c_buffer(' ' * (height * ((width * 3 + 3) & -4)))
got_bits = ctypes.windll.gdi32.GetDIBits(memdc, bmp, 0, height,
c_bits, c_bmp_header, DIB_RGB_COLORS)
# Here, got_bits should be equal to height to tell you all goes well.

带有完整解释的法语文章:Windows : capture d'écran

最佳答案

编辑,我找到了我的赌注!这是有效的代码:

srcdc = ctypes.windll.user32.GetWindowDC(0)
memdc = ctypes.windll.gdi32.CreateCompatibleDC(srcdc)
bmp = ctypes.windll.gdi32.CreateCompatibleBitmap(srcdc, width, height)
ctypes.windll.gdi32.SelectObject(memdc, bmp)
ctypes.windll.gdi32.BitBlt(memdc, 0, 0, width, height, srcdc, left, top, SRCCOPY)
bmp_header = pack('LHHHH', calcsize('LHHHH'), width, height, 1, 24)
c_bmp_header = c_buffer(bmp_header)
c_bits = c_buffer(' ' * (height * ((width * 3 + 3) & -4)))
got_bits = ctypes.windll.gdi32.GetDIBits(
memdc, bmp, 0, height, c_bits, c_bmp_header, DIB_RGB_COLORS)
# Here, got_bits should be equal to height to tell you all goes well.

关于python - 屏幕截图 [ctypes.windll CreateDCFromHandle],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17394685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com