import ctypes
import random
import time
user32 = ctypes.windll.user32
gdi32 = ctypes.windll.gdi32
SW = user32.GetSystemMetrics(0)
SH = user32.GetSystemMetrics(1)
hdc_screen = user32.GetDC(0)
hdc_mem = gdi32.CreateCompatibleDC(hdc_screen)
hbitmap = gdi32.CreateCompatibleBitmap(hdc_screen, SW, SH)
gdi32.SelectObject(hdc_mem, hbitmap)
class BITMAPINFOHEADER(ctypes.Structure):
_fields_ = [
("biSize", ctypes.c_uint32),
("biWidth", ctypes.c_int32),
("biHeight", ctypes.c_int32),
("biPlanes", ctypes.c_uint16),
("biBitCount", ctypes.c_uint16),
("biCompression", ctypes.c_uint32),
("biSizeImage", ctypes.c_uint32),
("biXPelsPerMeter", ctypes.c_int32),
("biYPelsPerMeter", ctypes.c_int32),
("biClrUsed", ctypes.c_uint32),
("biClrImportant", ctypes.c_uint32)
]
class BITMAPINFO(ctypes.Structure):
_fields_ = [
("bmiHeader", BITMAPINFOHEADER),
("bmiColors", ctypes.c_uint32 * 3)
]
bi = BITMAPINFO()
bi.bmiHeader.biSize = ctypes.sizeof(BITMAPINFOHEADER)
bi.bmiHeader.biWidth = SW
bi.bmiHeader.biHeight = -SH
bi.bmiHeader.biPlanes = 1
bi.bmiHeader.biBitCount = 32
bi.bmiHeader.biCompression = 0
while True:
gdi32.BitBlt(hdc_mem, 0, 0, SW, SH, hdc_screen, 0, 0, 0x00CC0020)
x = random.randrange(0, SW - 10, 10)
shift = random.choice([-10, 10])
gdi32.BitBlt(
hdc_screen,
x,
shift,
10,
SH - abs(shift),
hdc_mem,
x,
0 if shift > 0 else abs(shift),
0x00CC0020
)
time.sleep(1)