Как сохранить все открытые окна MS Paint одновременно: пошаговая инструкция

Представьте: вы создали десяток скетчей в Paint, а теперь нужно сохранять каждый файл вручную через Ctrl+S, выбирать папку и имя… Для таких ситуаций есть элегантное решение – автоматизация через Python. Ниже я покажу, как за 15 минут настроить систему массового сохранения даже для 50+ открытых окон.

Как работает скрипт

Механизм делится на три этапа:

  1. Поиск процессов – скрипт сканирует запущенные экземпляры mspaint.exe через библиотеку psutil (мониторинг процессов)
  2. Активация окон – pygetwindow переключает фокус между вкладками Paint
  3. Эмуляция действий – pyautogui имитирует нажатия Ctrl+S и сохраняет файлы с уникальными именами

Для работы потребуется:

  • Python 3.8+ (я тестировал на 3.12.8)
  • 4 библиотеки – установите их через терминал:
pip install psutil==6.1.1 pyautogui==0.9.54 pygetwindow==0.0.9

Совет: создайте отдельную папку для проекта – скрипт будет сохранять изображения туда, где он запущен.

Настройка скрипта

Скопируйте этот код в файл paint_saver.py:

# pip install psutil==6.1.1 pyautogui==0.9.54 pygetwindow==0.0.9

import psutil
import pyautogui
import pygetwindow as gw
import time
from datetime import datetime


def find_mspaint_instances():
    instances = []
    for proc in psutil.process_iter(attrs=['pid', 'name']):
        if proc.info['name'] and 'mspaint.exe' in proc.info['name'].lower():
            instances.append(proc.info['pid'])
    return instances


def bring_window_to_front(title):
    try:
        window = gw.getWindowsWithTitle(title)
        if window:
            window[0].activate()
            return True
    except Exception as e:
        print(f"Error bringing window to front: {e}")
    return False


def generate_filename():
    timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S-%f")[:-3]
    return f"{timestamp}.png" 


def save_mspaint_file():
    time.sleep(1)  # Allow time for the window to activate
    pyautogui.hotkey("ctrl", "s")  
    time.sleep(2)  # Wait for the Save dialog to open because Windows can be fcking slow: https://superuser.com/q/1734042/116475

    filename = generate_filename()  
    pyautogui.write(filename) 
    time.sleep(1)

    pyautogui.press("enter")  
    time.sleep(2)  

    print(f"Saved as: {filename}")


def main():
    instances = find_mspaint_instances()

    if not instances:
        print("No running instances of MS Paint found.")
        return

    print(f"Found {len(instances)} instance(s) of MS Paint.")

    for window in gw.getWindowsWithTitle("Untitled - Paint") + gw.getWindowsWithTitle("Paint"):
        if bring_window_to_front(window.title):
            print(f"Saving: {window.title}")
            save_mspaint_file()


if __name__ == "__main__":
    main()

Важные нюансы:

  1. Тайминги – задержки time.sleep(2) критичны для медленных ПК (Windows иногда «задумывается» при открытии диалогов)
  2. Имена файлов – генератор использует микросекунды, чтобы избежать перезаписи (можно изменить шаблон в generate_filename())
  3. Фильтрация окон – gw.getWindowsWithTitle(“Untitled – Paint”) ловит только новые файлы без имени
Результат работы скрипта

Типичные ошибки и решения

Окно не активируетсяДобавьте повторный вызов bring_window_to_front() с увеличенным sleep до 3 сек
Файлы сохраняются в DownloadsПеред pyautogui.press(“enter”) вставьте pyautogui.hotkey(“alt”, “d”) и введите путь
Скрипт «зависа»Обновите pyautogui до последней версии (иногда баги фиксят в новых релизах)

После выполнения скрипта можно закрыть все окна Paint одной командой:

taskkill -f -im mspaint.exe

Важно: эта команда завершит ВСЕ процессы Paint без предупреждений – сохраните изменения заранее.

Если нужно сохранять в определённый формат (JPG/BMP), измените расширение в generate_filename() и добавьте выбор типа файла через pyautogui.press(“tab”) и pyautogui.press(“down”). Для продвинутой настройки советую добавить логирование ошибок в try/except – так вы увидите, на каком именно окне возникла проблема.

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное