python 調用windowsAPI截圖


方式一

import time
import win32gui, win32ui, win32con, win32api


def window_capture(filename):
    hwnd = 0  # 窗口的編號,0號表示當前活躍窗口
    # 根據窗口句柄獲取窗口的設備上下文DC(Divice Context)
    hwndDC = win32gui.GetWindowDC(hwnd)
    # 根據窗口的DC獲取mfcDC
    mfcDC = win32ui.CreateDCFromHandle(hwndDC)
    # mfcDC創建可兼容的DC
    saveDC = mfcDC.CreateCompatibleDC()
    # 創建bigmap准備保存圖片
    saveBitMap = win32ui.CreateBitmap()
    # 獲取監控器信息
    MoniterDev = win32api.EnumDisplayMonitors(None, None)
    w = MoniterDev[0][2][2]
    h = MoniterDev[0][2][3]
    # print w,h   #圖片大小
    # 為bitmap開辟空間
    saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
    # 高度saveDC,將截圖保存到saveBitmap中
    saveDC.SelectObject(saveBitMap)
    # 截取從左上角(0,0)長寬為(w,h)的圖片
    saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
    saveBitMap.SaveBitmapFile(saveDC, filename)


beg = time.time()
for i in range(10):
    window_capture("haha.jpg")
end = time.time()
print(end - beg)

方式二

import time
from PIL import ImageGrab, Image
import numpy as np
import cv2

beg = time.time()
debug = False
# img = ImageGrab.grab(bbox=(250, 161, 1141, 610))
img = ImageGrab.grab()
end = time.time()
print('time:',end - beg)

img.show()
img.save("screen.jpg")

# PIL image to OpenCV image
im = np.array(img)
cv2.imshow('cv image', im)
cv2.waitKey()

# OpenCV image to PIL image
im_pil = Image.fromarray(im)
im_pil.show()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM