利用Python自帶的win32api和win32con、win32gui等模組,我們能執行許多windows下的自動化操作。比如兩個視窗的自動點選操作,從軟體中的視窗複製文字到txt中,甚至是截圖操作。
今天Python實用寶典就來講講怎麼在Python中實現截圖功能,以下教程預設您已經安裝好了Python哦,沒有的話見這個教程:python詳細安裝指南:
1.獲取視窗左上角及右下角座標
import win32api, win32con, win32gui
def get_window_pos(name):
name = name
handle = win32gui.FindWindow(0, name)
# 獲取視窗控制程式碼
if handle == 0:
return None
else:
return win32gui.GetWindowRect(handle)
x1, y1, x2, y2 = get_window_pos('暴雪戰網')
print(x1,y1,x2,y2)
結果:
F:\push\20190929>python 1.py** (349, 83, 1549, 1013)
其中視窗資訊(x1, y1, x2, y2),(x1, y1)是視窗左上角的座標,(x2, y2)是視窗右下角的座標。我們可以利用這個資訊配合PIL進行截圖。但是在這之前,我們還要解決兩個問題:
- 該視窗並不在當前的介面上,被其他的軟體覆蓋到底層中,這時候需要高亮視窗。
- 該視窗被最小化怎麼辦?
2.win32gui 高亮視窗
為了使得被疊在底層的視窗能放到最上層顯示,我們需要拿到視窗的handle,對其執行高亮操作,其實很簡單,我們剛剛獲得座標資訊的時候已經得到handle了,只需要做一下簡單的更改即可。
import win32api, win32con, win32gui
def get_window_pos(name):
name = name
handle = win32gui.FindWindow(0, name)
# 獲取視窗控制程式碼
if handle == 0:
return None
else:
# 返回座標值和handle
return win32gui.GetWindowRect(handle), handle
(x1, y1, x2, y2), handle = get_window_pos('暴雪戰網')
text = win32gui.SetForegroundWindow(handle)
這樣就能將被覆蓋到底層的視窗放到最上層,如下圖所示。
3. 還原最小化視窗
還有一種特殊情況就是視窗被縮小了,這時候我們就需要還原最小化視窗,其實也非常簡單,只要利用win32gui和win32con向該視窗傳送一個資訊即可。
import win32api, win32con, win32gui
def get_window_pos(name):
name = name
handle = win32gui.FindWindow(0, name)
# 獲取視窗控制程式碼
if handle == 0:
return None
else:
# 返回座標值和handle
return win32gui.GetWindowRect(handle), handle
(x1, y1, x2, y2), handle = get_window_pos('暴雪戰網')
win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
# 傳送還原最小化視窗的資訊
win32gui.SetForegroundWindow(handle)
# 設為高亮
效果如圖所示:
4.截圖
有了PIL模組和視窗的座標後,我們想截圖可非常簡單。PIL 模組安裝:
pip install pillow
安裝完就可以試一下我們的完整程式碼了,如下:
import win32api, win32con, win32gui
def get_window_pos(name):
name = name
handle = win32gui.FindWindow(0, name)
# 獲取視窗控制程式碼
if handle == 0:
return None
else:
# 返回座標值和handle
return win32gui.GetWindowRect(handle), handle
(x1, y1, x2, y2), handle = get_window_pos('暴雪戰網')
win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
# 傳送還原最小化視窗的資訊
win32gui.SetForegroundWindow(handle)
# 設為高亮
from PIL import Image, ImageGrab
img_ready = ImageGrab.grab((x1, y1, x2, y2))
# 截圖
img_ready.show()
# 展示
效果如下:
我們的文章到此就結束啦,如果你希望我們今天的Python 教程,請持續關注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦有任何問題都可以在下方留言區留言,我們都會耐心解答的!
Python實用寶典 (pythondict.com)
不只是一個寶典
歡迎關注公眾號:Python實用寶典
原文來自Python實用寶典:Python 截圖
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Python實用寶典, pythondict.com