python 使用win32api截圖全解釋


1、獲得應用窗口句柄

hwnd=win32gui.FindWindow(0,“窗口名字”)

2、通過應用窗口句柄獲得窗口DC

hwndDC=win32gui.GetWindowDC(hwnd)

3、通過hwndDC獲得mfcDC(注意主窗口用的是win32gui庫,操作位圖截圖是用win32ui庫)

mfcDC=win32ui.GreateDCFromHandle(hwnd)

4、創建兼容DC,實際在內存開辟空間( 將位圖BitBlt至屏幕緩沖區(內存),而不是將屏幕緩沖區替換成自己的位圖。同時解決繪圖閃爍等問題)

neicunDC=mfcDC.CreateCompatibleDC()

5、創建位圖

savebitmap=win32ui.CreateBitmap()

6、設置位圖的大小以及內容(圖片為應用窗口的整個截圖)

width=40
height=40(長寬為自己想要圖片的大小,單位是像素)
savebitmap.CreateCompatibleBitmap(mfcDC,width,height)

7、將位圖放置在兼容DC,即將位圖數據放置在剛開辟的內存里

neicunDC.SleteObject(savebitmap)

8、截取位圖部分,並將截圖保存在剪貼板(剪貼板是Windows系統一段可連續的。可隨存放信息的大小而變化的內存空間,用來臨時存放交換信息。只能保留一份數據,每當新的數據傳入,舊的便會被覆蓋。平時使用的qq截圖、微信截圖就是將截好的圖放置在剪貼板,然后在QQ/微信窗口粘貼才將截圖從剪貼板中取出來)’’’

neicunDC.BitBle((w1,w2),width,height,mfcDC,(x,y),win32con.SRCCOPY)
‘’‘BitBle函數需要輸入6個參數,第一參數(w1,w2),指在位圖里顯示的左上角頂點,一般為(0,0),若不為(0,0),應用位圖無法覆蓋的地方為黑色背景。第二第三參數width,height最終截圖的長寬(一般與上面設置的位圖大小一致)。第四參數指窗口的mfcDC。第五參數(x,y)指應用截圖起點的邏輯坐標(設備坐標指相對於屏幕左上角為起點的坐標,邏輯坐標指相對於應用窗口左上角的坐標)。第六參數win32con.SRCCOPY,指用復制的方法截取,其他參數可百度光柵操作代碼。整個邏輯是內存作為黑色背景牆,第二層為位圖,第三層為我們需要截圖的位置。所以BitBle的第一個參數是位圖放置在黑色背景牆的位置(內存),以黑色背景牆左上角為起點,(w1,w2)為位圖左上角頂點的位置。放置好位圖后,在位圖上截圖,截圖的長為width,寬為height。截圖的起始位置(相對於應用窗口左上角頂點的位置坐標)為(x,y)。’’’

9、將截圖數據從剪貼板中取出,並保存為bmp圖片(注意創建位圖使用的是bitmap,故圖片格式為bmp。上一步也只是截圖並沒有操作’另存為’。其中filename為存放圖片的名稱,可自己修改。保存的路徑為當前腳本儲存的路徑。比如當前腳本在D:\TEST文件夾下,那bmp截圖文件也在D:\TEST文件夾下)’’’

savebitmap.SaveBitmapFile(neicunDC,filename)

10、釋放內存

win32gui.delete(savebitmap.GetHandle())
neicunDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.Release(hwnd,hwndDC)


免責聲明!

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



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