python tkinter 实现反截图(采用windows api)
前文
我们需要明白 windows user32.dll 动态库 的 "SetWindowDisplayAffinity"模块
SetWindowDisplayAffinit 旨在支持 Windows 7 新增的窗口内容保护功能。 此功能使应用程序能够保护其自己的屏幕窗口内容
他有两个值 【分别是hWnd 和 dwAffinity】
其中 hWnd 类型是:HWND 他是顶级窗口的句柄。 窗口必须属于当前进程。
而 dwAffinity 类型:DWORD 用于显示相关性设置,用于指定窗口的内容可以显示的位置。
他有3个值 :
【0x00000000 对窗口的显示位置施加任何限制。】
【0x00000001 窗口内容仅显示在监视器上。 在其他地方,该窗口不显示任何内容。[黑]】
【0x00000011 窗口仅显示在监视器上。 在其他地方,窗口根本不显示。[透明]】

正文
我们须安装ctypes,tkinter 模块 【用pip install 模块名】安装
接着在文件内导入
import tkinter as tk #as tk tkinter的别名。
from ctypes import *
from ctypes import wintypes #在 ctypes 导入 wintypes 模块
win = tk.Tk()
win.geometry('450x250') #窗口大小
win.update() # 刷新窗口 以便句柄能正常使用
dwAffinity = wintypes.DWORD(0x00000001)#使用wintypes模块,“0x00000001”可换成其他值
a = win.winfo_id() #获取程序窗口的句柄 注意!这不是系统句柄
hWindow = windll.user32.GetParent(a) # 所以我们还要用这改为系统句柄
dll = cdll.LoadLibrary(r"C:\WINDOWS\system32\")#接着导入user32.dll 模块
v = dll.SetWindowDisplayAffinity(hWindow,dwAffinity)#最后调用user32.dll模块的SetWindowDisplayAffinity
win.mainloop()#保持一下窗口显示
#这就好了,但是为了方便显示成功没,我们就再写个判断
if v != 1 :
dll = cdll.LoadLibrary(r"C:\WINDOWS\system32\kernel32.dll")#导入windows中的显示错函数
dll = dll.GetLastError()#调用
print(dll)#打印到控制台
这就结束了
给张图:


多嘴几句
【仅供学习】
如有写的不对,请大佬多多指教
这只支持windows系统
还有 还有“反反截图”软件 运用 Hook 【钩子】强制注入dll 实现废除功能 就不放地址了
水一篇文章