|
发表于 2025-3-13 14:04:52
|
显示全部楼层
山西省太原市
import win32gui, win32ui, win32con
from PIL import Image
def window_capture(window_name, save_path="screenshot.png"):
hwnd = win32gui.FindWindow(None, window_name)
if not hwnd:
print(f"未找到标题为'{window_name}'的窗口")
return
# 将窗口前置
win32gui.SetForegroundWindow(hwnd)
# 等待窗口完全显示
win32gui.Sleep(100)
left, top, right, bot = win32gui.GetClientRect(hwnd)
w = right - left
h = bot - top
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
saveDC.SelectObject(saveBitMap)
result = win32gui.PrintWindow(hwnd, saveDC.GetSafeHdc(), 2) # 2表示截取客户区
bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)
im = Image.frombuffer(
'RGB',
(bmpinfo['bmWidth'], bmpinfo['bmHeight']),
bmpstr, 'raw', 'BGRX', 0, 1)
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
if result == 1:
im.save(save_path)
print(f"截图已保存至 {save_path}")
# 使用例子
window_capture("无标题 - 记事本", "example_screenshot.png") |
|