Утилита или команда для сохранения всех открытых экземпляров Блокнота куда-либо.

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

Время от времени я использую Блокнот вместо Notepad++ или более лучшего редактора. Иногда я даже записываю важные вещи в тех окнах Блокнота.

Когда приходит время перезагрузить мой ПК, у меня часто открыто до 20 экземпляров Блокнота. Конечно, большинство из них бесполезны, но мне нужно просмотреть каждое окно, чтобы понять, есть ли что-либо, стоящее сохранения.

Существует ли какая-либо утилита или команда, позволяющая сделать что-то из следующего:

  1. Сохранить все открытые блокноты в один файл
  2. Сохранить все открытые блокноты в файлы с именами по умолчанию
  3. Сохранить экземпляры блокнота в памяти на диск, чтобы они запускались при перезагрузке

Да, существует инструмент AutoHotKey, подходящий для такой задачи.

Вы можете создать макрос, который повторно

  1. фокусирует любое окно со словом Notepad в заголовке (или выходит, если не найдено такое окно)
  2. отправляет Ctrl+S для сохранения файла
  3. ждет несколько секунд
  4. если находит (также по заголовку) открытый диалог “Сохранить как” (то есть в случае сохранения нового файла), заполняет некоторое имя файла по умолчанию (отправляя нажатия клавиш) и отправляет Alt+S для нажатия на кнопку Сохранить в диалоге
  5. добавляет команду notepad <filename> в файл restore-notepads.bat
  6. отправляет Alt+F4 для закрытия экземпляра Блокнота
  7. повторяет.

затем вы можете добавить restore-notepads.bat в меню Автозагрузка, и у вас будет функциональность, которую вы описали как “3.Сохранение экземпляров блокнота в памяти на диск, чтобы они запускались при перезагрузке”.

Я использую блокнот как временное хранилище текстов, так как ни одна другая программа не запускается быстрее. Чтобы сохранить или сделать резервную копию содержимого экземпляров блокнота, я написал немного кода AHK. Он, по сути, основан на ответе miroxlav, но мне не нужно восстанавливать.

Итак, вот код.

+!s:: ;Сохранить все экземпляры блокнота

    ClipSaved := ClipboardAll 

    LastClip := ""
    WinGet, id, list, *Untitled - Notepad, ,, ;[1]
    Loop, %id%
    {
        this_id := id%A_Index%
        WinActivate, ahk_id %this_id%
        Send ^A
        Send ^C
        Sleep 500
        WinMinimize, ahk_id %this_id%
        WinGetClass, this_class, ahk_id %this_id%
        WinGetTitle, this_title, ahk_id %this_id%
        LastClip = %LastClip% `r`n-------`r`n %ClipBoard% ;[2]
        ToolTip , Saving All Untitled Notepad Instances `n%a_index% of %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n
    }

    ClipBoard := LastClip
    ; ToolTip , %ClipBoard%

    Run notepad.exe
    Sleep 1000
    Send ^V
    Sleep 1000

    Clipboard := ClipSaved  
    ClipSaved = 

    #Persistent
    ToolTip, Done
    SetTimer, RemoveToolTip, 2500
    return

    RemoveToolTip:
    SetTimer, RemoveToolTip, Off
    ToolTip
    return

return

Сохраните код в файл .ahk, запустите его и после нажатия Alt+Shift+S содержимое всех безымянных экземпляров блокнота должно быть объединено в одном новом окне блокнота.

Примечание:

  • [1] Если вы хотите, чтобы сохранялись все экземпляры блокнота, а не только безымянные, измените *Untitled - Notepad на ahk_exe notepad.exe.
  • [2] Это для отдельной строки.

Хотя этот ответ дан через 5 лет, я все же надеюсь, что он будет полезен вам.

Так как версия 2 теперь стандарт, решил опубликовать обновление. Грубый черновик, но должен работать.

; для использования только с AutoHotkey v2.
!s:: ;Сохранить все экземпляры блокнота
 {
    ; NotePadIDList := WinGetList("Notepad") ; Для всех экземпляров блокнота.
    NotePadIDList := WinGetList("Untitled - Notepad") ; для сохранения несохраненных экземпляров блокнота.
    ; AllTextTitle := "Самые последние тексты блокнота" ; Для всех экземпляров блокнота.
    AllTextTitle := "Несохраненные экземпляры блокнота" ; Для всех экземпляров блокнота.
    AllTextFilename := "ВсеТекстыБлокнота" ; имя файла для новой сохраненной копии.

    MsgBox "Сохранение " . AllTextTitle ;

    Count := NotePadIDList.Length ;
    AllContent := AllTextTitle . " [" . Count . " записей]`r`n==================================================`r`n`r`n"
    rCount := 1

    ; Перебираем все или несохраненные экземпляры блокнота
    for CurID in NotePadIDList
    {
        WinActivate(CurID) ;
        sleep(100) ; Краткая пауза, чтобы включить окно.
        WinText := WinGetText(CurID) ; Получить текст текущего окна
        AllContent := AllContent . "Запись [" . rCount . "]`r`n-------------------------------------------------`r`n" . WinText  ;
        rCount := rCount + 1 ;
    }

    ; Определяем путь к файлу в папке "Документы" пользователя.
    userProfile := EnvGet("USERPROFILE") ; Получить значение %USERPROFILE%
    filePath := userProfile "\Documents\" . AllTextFilename . ".txt" ; Создать путь к файлу

    if FileExist(filePath)
    {
        MsgBox("Файл уже существует: " filePath)
    }
    else
    {
        file := FileOpen(filePath, "w") ; Открыть файл для записи (создает его, если не существует)
        if !file ; Проверить успешность открытия файла.
        {
            MsgBox "Не удалось создать файл!"
            return
        }
        file.Write(AllContent) ; Записать содержимое в файл
        file.Close() ; Закрыть файл
        MsgBox("Файл успешно создан по адресу: " filePath)
    }

    ; MsgBox AllContent ;
    ExitApp
}

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

Решение проблемы с множественными запущенными экземплярами Notepad при помощи AutoHotKey

Если вы часто используете Notepad для хранения временной информации, то перед перезагрузкой системы возникает задача сохранить информацию из всех открытых окон. Рассмотрим, как с использованием скриптов AutoHotKey можно автоматизировать этот процесс.

AutoHotKey: инструмент для автоматизации

AutoHotKey — мощное средство, позволяющее автоматизировать задачи взаимодействия с системой. Используя его, можно создать скрипт, который:

  1. Фокусируется на каждом окне с Notepad.
  2. Сохраняет содержимое каждого окна.
  3. Создаёт текстовый файл с содержимым всех окон.
  4. Автоматизирует восстановление окон при следующем запуске системы.

Создание скрипта

Для выполнения этой задачи можно создать скрипт, который последовательно обрабатывает все открытые окна Notepad. Вот пример кода на AutoHotKey для этого:

; Для использования с AutoHotkey v2

!s:: ; Сохранить все экземпляры Notepad
{
    NotePadIDList := WinGetList("Untitled - Notepad") ; для сохранения несохранённых
    AllTextTitle := "Несохранённые экземпляры Notepad"
    AllTextFilename := "all_notepad_texts"

    MsgBox "Сохраняются " AllTextTitle

    Count := NotePadIDList.Length
    AllContent := AllTextTitle " [" Count " записей]`r`n==================================================`r`n`r`n"
    rCount := 1

    ; Перебираем все несохранённые экземпляры Notepad
    for CurID in NotePadIDList
    {
        WinActivate(CurID)
        sleep(100)
        WinText := WinGetText(CurID)
        AllContent := AllContent "Запись [" rCount "]`r`n-------------------------------------------------`r`n" WinText
        rCount ++
    }

    ; Определяем путь к файлу в папке "Документы" пользователя
    userProfile := EnvGet("USERPROFILE")
    filePath := userProfile "\Документы\" AllTextFilename ".txt"

    if FileExist(filePath)
    {
        MsgBox("Файл уже существует: " filePath)
    }
    else
    {
        file := FileOpen(filePath, "w")
        if !file
        {
            MsgBox "Не удалось создать файл!"
            return
        }
        file.Write(AllContent)
        file.Close()
        MsgBox("Файл успешно создан по адресу: " filePath)
    }

    ExitApp
}

Шаги для реализации

  1. Установите AutoHotKey: Загрузите и установите AutoHotKey с официального сайта.
  2. Создайте скрипт: Сохраните приведённый выше код в файл с расширением .ahk.
  3. Запустите скрипт: Дважды щелкните по файлу скрипта, чтобы он начал свою работу.
  4. Сохраните данные: Используйте горячую клавишу Alt + S для запуска скрипта.

Преимущества подхода

  • Автоматизация: Сохраняя все открытые окна Notepad, данный скрипт снижает риск потери данных.
  • Простота использования: Не требует специальных знаний для использования.
  • Гибкость: Можно адаптировать скрипт для других приложений или сценариев.

Заключение

Используя AutoHotKey, вы получите функциональное решение для автоматического сохранения всех открытых экземпляров Notepad перед перезагрузкой системы. Этот метод не только защищает ваши данные, но и значительно экономит время.

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

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