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

Вопрос или проблема

У меня открыто более десятка окон MS Paint. Как я могу сохранить их все сразу?

enter image description here

Я использую Windows 11 24H2 Pro.

Вот скрипт на Python, чтобы сохранить все открытые окна MS Paint сразу:

# 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()

enter image description here

Затем, чтобы закрыть все окна mspaint.exe:

taskkill -f -im mspaint.exe

Я использую Python 3.12.8.

Ответ или решение

Если вы столкнулись с задачей сохранения всех открытых окон Microsoft Paint на вашей системе под управлением Windows 11 24H2 Pro, то эта проблема может быть эффективно решена с помощью автоматизации на языке программирования Python. Поскольку MS Paint не предоставляет встроенной функции для массового сохранения всех открытых окних, вам придется прибегнуть к использованию сторонних библиотек и утилит.

Теория

MS Paint является графическим редактором, который не поддерживает автоматическое сохранение всех открытых проектов в одном действии. Открытие множества окон одновременно может быть обременительным, особенно если необходимо законсервировать каждое из них по отдельности. Автоматизация этих процессов через скрипт на Python с использованием библиотек для работы с процессами и оконными интерфейсами позволит существенно упростить задачу.

Пример

Вы можете воспользоваться Python-скриптом, который позволяет идентифицировать все активные процессы MS Paint, установить фокус на их окнах по очереди и сохранить каждый из них, используя горячие клавиши и имена, генерируемые на основании текущего времени. Для этого будут использоваться библиотеки psutil, pyautogui и pygetwindow. Эта стратегия помогает автоматически активировать окна и выполнять действия в них, такие как сохранение.

Вот пример такого скрипта:

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 slow

    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()

Применение

Запустив данный скрипт, вы сможете убедиться в том, что все открытые окна MS Paint будут сохранены автоматически. Скрипт проходит через следующие фазы:

  1. Идентификация процессов: С помощью psutil, скрипт определяет все запущенные экземпляры mspaint.exe.

  2. Активизация окон: Используя pygetwindow, скрипт поочередно активирует каждое окно MS Paint.

  3. Автоматическое сохранение: Установив фокус на каждом окне, pyautogui выполняет последовательность действий Ctrl + S для открытия окна сохранения, задает уникальное имя файлу, основываясь на текущем времени, и подтверждает сохранение.

  4. Завершение работы: После завершения процесса сохранения всех окон, можно закрыть MS Paint через команду taskkill -f -im mspaint.exe, что гарантирует, что все окна будут корректно закрыты.

Заключение

Такой подход автоматизации позволяет сократить время и усилия, требуемые для сохранения множества проектов в MS Paint. В будущем, при регулярной работе с множеством графических файлов, такая автоматизация окажется не только удобной, но и практически необходимой, особенно в условиях ограниченности временных ресурсов. Использование Python и его обширной экосистемы библиотек предоставляет большие возможности для автоматизации любых рутинных задач, включая взаимодействие с оконными приложениями.

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

Капча загружается...