剪切板处理
#从这个找到的例子win32clipboardDemo.py
import win32clipboard
from win32clipboard import *
import time
import win32con
# 速度快 容易出错
class niubi():
def lihai(self):
while True:
t = jianting().main()
print(t)
class jianting():
cf_names = {}
def __init__(self):
for name, val in list(win32con.__dict__.items()):
if name[:3] == "CF_" and name != "CF_SCREENFONTS": # CF_SCREEN_FONTS==CF_TEXT!?!?
self.cf_names[val] = name
#print(self.cf_names)
def clipboard_get(self):
"""获取剪贴板数据"""
data = ""
if IsClipboardFormatAvailable(win32clipboard.CF_UNICODETEXT):
win32clipboard.OpenClipboard()
try:
data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
finally:
win32clipboard.CloseClipboard()
return data
def TestClipboardEnum(self):
OpenClipboard()
try:
# Enumerate over the clipboard types
enum = 0
while 1:
enum = EnumClipboardFormats(enum)
if enum == 0:
break
assert IsClipboardFormatAvailable(
enum
), "Have format, but clipboard says it is not available!"
n = self.cf_names.get(enum, "")
if not n:
try:
n = GetClipboardFormatName(enum)
except error:
n = "unknown (%s)" % (enum,)
print("Have format", n)
print("Clipboard enumerator tests worked correctly")
finally:
CloseClipboard()
def main(self):
"""后台脚本:每隔0.3秒,读取剪切板文本,检查有无指定字符或字符串,如果有则执行替换"""
# recent_txt 存放最近一次剪切板文本,初始化值只多执行一次paste函数读取和替换
recent_txt = self.clipboard_get()
while True:
# txt 存放当前剪切板文本
txt = self.clipboard_get()
# 剪切板内容和上一次对比如有变动,再进行内容判断,判断后如果发现有指定字符在其中的话,再执行替换
if txt != recent_txt:
# print(f'txt:{txt}')
recent_txt = txt # 没查到要替换的子串,返回None
#self.TestClipboardEnum() #枚举剪切板类型
return recent_txt
# 检测间隔(延迟0.3秒)
time.sleep(0.3)
if __name__ == '__main__':
niubi().lihai()