Есть такой скрипт под венду
# -*- coding: utf-8 -*- from tkinter import * from PIL import Image, ImageGrab from datetime import datetime import win32clipboard import hashlib root = Tk() root.title("Автозапись") root.geometry("400x100+200+100") lb = Label(root, text="Включено автоматическое сохранение графики из буфера обмена") lb.pack(side=TOP,pady=10) Button(root,text="Завершить",command=root.destroy).pack(side=BOTTOM,pady=10) last_image = bytes(123) def getClipboardFormats(): "Сбор списка возможных форматов содержимого буфера обмена" win32clipboard.OpenClipboard() available_formats = [] current_format = 0 while True: # Читаем следующий формат current_format = win32clipboard.EnumClipboardFormats(current_format) # Все форматы исчерпаны, цикл прерываем if not current_format: break available_formats.append(current_format) win32clipboard.CloseClipboard() return available_formats def grab_it(): "Сохраняем снимок экрана в файл" global last_image im = ImageGrab.grabclipboard() # Флаг "текст". Устанавливается, если содержимое буфера поддерживает # текстовый формат. Calc при копировании таблицы(или ячейки) в буфер обмена # выдает поддержку "графических" форматов CF_BITMAP, CF_DIB, CF_DIBV5 # Чтобы отделить Calc'овское содержимое от PrintScreen используем этот флаг. txt = 1 in getClipboardFormats() # Переводим в байтовую последовательность для сравнения # со старым изображением if isinstance(im, Image.Image) and not txt: im1 = im.tobytes() else: im1 = None # Сохраняем в файл, только если свежая картинка в буфере И там графический # формат И формат не поддерживает "текст" if isinstance(im, Image.Image) and im1 != last_image and not txt: last_image = im1 # Название файла сгенерируем из текущих даты и времени fnm = "{}{}".format(str(datetime.now())[:19].replace(":","-"),".jpg") # print(fnm) im.save(fnm) # планировщик tkinter вызовет grab_it через 100мс root.after(100, grab_it) grab_it() # Запуск процесса root.mainloop()