您的位置:首页 > 理论基础

Python 实现计算机屏幕水印

2018-02-09 11:11 826 查看
原本有公司提议给业务系统加上水印,工作人员拍照可自动打上水印。同事开玩笑说应该给整个屏幕打上水印——“物理水印”。直接在显示器上设置水印?这不显示,想想python能不能实现,果然有人用python实现过。屏幕出现水印后,各个应用程序仍然可点击操作。
主要模块:
pip install tkinter
pip install pypiwin32
脚本:(文件名:watermark.py)import tkinter, win32api, win32con, pywintypes

def get_replicate_text(text):
i,space,str1,str2 = 0,70,"",""
while (i <= 5):
str1 = str1 + text + " "*space
i = i + 1
str2 = " "*space + str1 + "\n\n\n\n"
str1 = str1 + "\n\n\n\n"
str1 = (str1 + str2) * 5
return str1

mytext = get_replicate_text('KK 笔记')
root = tkinter.Tk()
width = win32api.GetSystemMetrics(0)
height = win32api.GetSystemMetrics(1)
root.overrideredirect(True) #隐藏显示框
root.geometry("+0+0") #设置窗口位置或大小
root.lift() #置顶层
root.wm_attributes("-topmost", True) #始终置顶层
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")#白色背景透明
hWindow = pywintypes.HANDLE(int(root.frame(), 16))
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)
label = tkinter.Label(text=mytext,compound = 'left',font=('Times New Roman','15'), fg='#d5d5d5', bg='white')
label.pack() #显示
root.mainloop() #循环
后台执行:pythonw watermark.py效果:



同样可以实现桌面 gif 动态图:
import tkinter, win32api, win32con, pywintypes

root = tkinter.Tk()
root.overrideredirect(True)
root.geometry("+1100+450") #设置窗口位置或大小
root.lift()
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")#白色背景透明
hWindow = pywintypes.HANDLE(int(root.frame(), 16))
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)
framenum = 30 # gif 的帧数需要确定下来
giffile = 'D:/Python35/mypy/timg.gif' #找一张白色背景的gif,设置白色为透明
frames = [tkinter.PhotoImage(file=giffile,format = 'gif -index %s' % i) for i in range(framenum)]
def update(ind):
if (ind == framenum-1):#
ind = 0
frame = frames[ind]
ind += 1
label.configure(image=frame)
root.after(100, update, ind)
label = tkinter.Label(root,bg='white')#设置白色为透明
label.pack() #显示
root.after(0, update, 0)
root.mainloop() #循环



参考:
How to display text on the screen without a window using Python

Extended Window Styles
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: