Python根據(jù)Windows窗口截圖的幾種實(shí)現(xiàn)方法
在Windows系統(tǒng)下,Python可通過(guò)以下方法實(shí)現(xiàn)窗口截圖,具體方案取決于需求精度和場(chǎng)景:
1. 使用PIL庫(kù)截取全屏或指定區(qū)域
from PIL import ImageGrab
# 截取整個(gè)屏幕
screenshot = ImageGrab.grab()
screenshot.save("full_screen.png")
# 截取指定區(qū)域(左上角坐標(biāo)+寬高)
crop_area = (100, 100, 500, 400) # left, top, right, bottom
cropped = ImageGrab.grab(bbox=crop_area)
cropped.save("partial_screen.png")
2. 結(jié)合win32gui精準(zhǔn)截取指定窗口
需先安裝pywin32庫(kù):
pip install pywin32
代碼示例:
import win32gui
from PIL import ImageGrab
# 獲取窗口句柄
hwnd = win32gui.FindWindow(None, "記事本") # 窗口標(biāo)題
# 獲取窗口位置和尺寸
left, top, right, bot = win32gui.GetWindowRect(hwnd)
width = right - left
height = bot - top
# 截取窗口區(qū)域
img = ImageGrab.grab(bbox=(left, top, right, bot))
img.save("window_screenshot.png")
3. 使用mss庫(kù)(跨平臺(tái)高性能)
安裝:
pip install mss
代碼示例:
import mss
with mss.mss() as sct:
# 截取指定顯示器編號(hào)的屏幕
monitor = sct.monitors[1]
sct_img = sct.grab(monitor)
mss.tools.to_png(sct_img.rgb, sct_img.size, output="mss_screenshot.png")
4. 截取隱藏窗口(需配合win32API)
對(duì)于非最小化窗口,可通過(guò)win32gui獲取窗口DC后截圖:
import win32gui
import win32ui
import win32con
from PIL import Image
hwnd = win32gui.FindWindow(None, "計(jì)算器")
# 創(chuàng)建設(shè)備上下文
hdc = win32gui.GetDC(hwnd)
mdc = win32gui.CreateCompatibleDC(hdc)
# 獲取窗口尺寸
left, top, right, bot = win32gui.GetWindowRect(hwnd)
w, h = right - left, bot - top
# 創(chuàng)建位圖
bitmap = win32ui.CreateBitmap()
bitmap.CreateCompatibleBitmap(hdc, w, h)
win32gui.SelectObject(mdc, bitmap.GetHandle())
# 復(fù)制屏幕區(qū)域
win32gui.BitBlt(mdc, 0, 0, w, h, hdc, 0, 0, win32con.SRCCOPY)
# 保存為圖片
bmp_info = bitmap.GetInfo()
bmp_str = bitmap.GetBitmapBits(True)
pil_img = Image.frombuffer(
'RGB',
(bmp_info['bmWidth'], bmp_info['bmHeight']),
bmp_str,
'raw',
'BGRX',
0,
1
)
pil_img.save("hidden_window.png")
# 釋放資源
win32gui.DeleteObject(bitmap.GetHandle())
win32gui.DeleteDC(mdc)
win32gui.ReleaseDC(hwnd, hdc)
關(guān)鍵注意事項(xiàng):
- 窗口標(biāo)題匹配:
FindWindow需精確匹配窗口標(biāo)題,可通過(guò)Spy++工具獲取實(shí)際標(biāo)題 - 權(quán)限問(wèn)題:部分窗口截圖需要管理員權(quán)限
- 性能對(duì)比:
- PIL:簡(jiǎn)單快速,適合簡(jiǎn)單場(chǎng)景
- mss:跨平臺(tái),支持多顯示器,性能優(yōu)異
- win32API:精準(zhǔn)控制,可處理隱藏窗口
- DPI縮放:高DPI屏幕需額外處理縮放比例,可通過(guò)
ctypes獲取系統(tǒng)縮放系數(shù)調(diào)整坐標(biāo)
根據(jù)具體需求選擇方案,常規(guī)截圖推薦使用PIL或mss,精準(zhǔn)控制推薦win32API方案。
到此這篇關(guān)于Python根據(jù)Windows窗口截圖的幾種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Python根據(jù)Windows窗口截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python MySQL數(shù)據(jù)庫(kù)基本操作及項(xiàng)目示例詳解
這篇文章主要介紹了Python連接MySQL數(shù)據(jù)庫(kù)后的一些基本操作,并以銀行管理系統(tǒng)項(xiàng)目為例,為大家具體介紹了一下部分功能的實(shí)現(xiàn),文中的示例代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下2021-12-12
在Python中字典按值排序的實(shí)現(xiàn)方法
這篇文章主要介紹了在Python中字典按值排序的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python調(diào)用本地ollama大模型實(shí)現(xiàn)智能語(yǔ)音助手
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用本地ollama大模型實(shí)現(xiàn)智能語(yǔ)音助手,集成了語(yǔ)音錄制,語(yǔ)音識(shí)別等功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05
基于Pytorch實(shí)現(xiàn)的聲音分類實(shí)例代碼
聲音分類是音頻深度學(xué)習(xí)中應(yīng)用最廣泛的方法之一,下面這篇文章主要給大家介紹了如何基于Pytorch實(shí)現(xiàn)聲音分類的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
python中使用enumerate函數(shù)遍歷元素實(shí)例
這篇文章主要介紹了python中使用enumerate函數(shù)遍歷元素實(shí)例,這是一個(gè)比較簡(jiǎn)單的例子,需要的朋友可以參考下2014-06-06
Python3 翻轉(zhuǎn)二叉樹(shù)的實(shí)現(xiàn)
這篇文章主要介紹了Python3 翻轉(zhuǎn)二叉樹(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

