python tkinter 實(shí)現(xiàn)反截圖(采用windows api)
前文
我們需要明白 windows user32.dll 動(dòng)態(tài)庫?的 "SetWindowDisplayAffinity"模塊
SetWindowDisplayAffinit?旨在支持 Windows 7 新增的窗口內(nèi)容保護(hù)功能。 此功能使應(yīng)用程序能夠保護(hù)其自己的屏幕窗口內(nèi)容
他有兩個(gè)值? 【分別是hWnd 和?dwAffinity】
其中?hWnd?類型是:HWND?他是頂級(jí)窗口的句柄。 窗口必須屬于當(dāng)前進(jìn)程。
而?dwAffinity?類型:DWORD 用于顯示相關(guān)性設(shè)置,用于指定窗口的內(nèi)容可以顯示的位置。
他有3個(gè)值 :
【0x00000000?對(duì)窗口的顯示位置施加任何限制。】
【0x00000001?窗口內(nèi)容僅顯示在監(jiān)視器上。 在其他地方,該窗口不顯示任何內(nèi)容。[黑]】
【0x00000011 窗口僅顯示在監(jiān)視器上。 在其他地方,窗口根本不顯示。[透明]】

正文
我們須安裝ctypes,tkinter 模塊? 【用pip install 模塊名】安裝
接著在文件內(nèi)導(dǎo)入
import tkinter as tk? #as tk?tkinter的別名。
from ctypes import *
from ctypes import wintypes #在?ctypes 導(dǎo)入?wintypes 模塊
win = tk.Tk()
win.geometry('450x250') #窗口大小
win.update() # 刷新窗口 以便句柄能正常使用
dwAffinity = wintypes.DWORD(0x00000001)#使用wintypes模塊,“0x00000001”可換成其他值
a = win.winfo_id() #獲取程序窗口的句柄?注意!這不是系統(tǒng)句柄
hWindow = windll.user32.GetParent(a) # 所以我們還要用這改為系統(tǒng)句柄
dll = cdll.LoadLibrary(r"C:\WINDOWS\system32\")#接著導(dǎo)入user32.dll 模塊
v = dll.SetWindowDisplayAffinity(hWindow,dwAffinity)#最后調(diào)用user32.dll模塊的SetWindowDisplayAffinity
win.mainloop()#保持一下窗口顯示
#這就好了,但是為了方便顯示成功沒,我們就再寫個(gè)判斷
if v != 1 :
? dll = cdll.LoadLibrary(r"C:\WINDOWS\system32\kernel32.dll")#導(dǎo)入windows中的顯示錯(cuò)函數(shù)
? dll = dll.GetLastError()#調(diào)用
? print(dll)#打印到控制臺(tái)
這就結(jié)束了
給張圖:


多嘴幾句
【僅供學(xué)習(xí)】
如有寫的不對(duì),請(qǐng)大佬多多指教
這只支持windows系統(tǒng)
還有 還有“反反截圖”軟件? 運(yùn)用 Hook 【鉤子】強(qiáng)制注入dll 實(shí)現(xiàn)廢除功能?就不放地址了
水一篇文章