Я пытаюсь сделать снимок экрана с python, используя только ctypes.
Я застреваю после битблта.у кого-нибудь есть код, который сохраняет растровый объект в файл с ctypes в python?
это код, который я написал до сих пор:
import ctypes
from ctypes import *
#Constants
SM_CXSCREEN = 0
SM_CYSCREEN = 1
SRCCOPY = 0xCC0020
user32 = ctypes.windll.user32
gdi32 = ctypes.windll.gdi32
class BITMAPINFOHEADER(ctypes.Structure):
_fields_ = [
('biSize', ctypes.c_uint32),
('biWidth', ctypes.c_int),
('biHeight', ctypes.c_int),
('biPlanes', ctypes.c_short),
('biBitCount', ctypes.c_short),
('biCompression', ctypes.c_uint32),
('biSizeImage', ctypes.c_uint32),
('biXPelsPerMeter', ctypes.c_long),
('biYPelsPerMeter', ctypes.c_long),
('biClrUsed', ctypes.c_uint32),
('biClrImportant', ctypes.c_uint32)
]
class BITMAPINFO(ctypes.Structure):
_fields_ = [
('bmiHeader', BITMAPINFOHEADER),
('bmiColors', ctypes.c_ulong * 3)
]
hDesktopWnd = user32.GetDesktopWindow()
WinDC = user32.GetDC (hDesktopWnd)
CopyDC = gdi32.CreateCompatibleDC (WinDC)
hBitmap = gdi32.CreateCompatibleBitmap (WinDC, 1000, 1000)
gdi32.SelectObject (CopyDC, hBitmap)
gdi32.BitBlt(CopyDC, 0,0, 1000, 1000, WinDC, 0, 0, SRCCOPY);
я знаю, что следующим шагом будетчто-то вроде:
lpbi = BITMAPINFO()
ctypes.memset(ctypes.byref(lpbi), 0x00, ctypes.sizeof(lpbi))
lpbi.bmiHeader.biSize = ctypes.sizeof(BITMAPINFOHEADER)
gdi32.SelectObject (CopyDC, hBitmap)
...
но это отстой и не сработало.пожалуйста, помогите.