Python 实现计算机屏幕水印

原本有公司提议给业务系统加上水印,工作人员拍照可自动打上水印。同事开玩笑说应该给整个屏幕打上水印——“物理水印”。直接在显示器上设置水印?这不显示,想想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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值