воскресенье, 10 ноября 2013 г.

Скриншоты в Windows с помощью IrfanView и немного автоматизации (сценарием для WSH)

КДПВ. Свиток

Вы наверняка уже знаете, что основным средством для работы с растровой графикой я использую IrfanView. Я посвятил целый пост описанию того, как запускать эту программу в Linux, но для пользователей Windows достаточно будет ознакомиться с первой половиной.

Сегодня я расскажу про скриншотопроизводство с помощью этой программы, а также представлю скрипт (сценарий), который использовал более трёх лет (с момента создания скрипта и до отказа от Windows) для автоматического запуска после включения компьютера режима создания скриншотов в IrfanView, задействуя графический интерфейс и имитацию нажатия клавиш человеком.

! Если вы хотите сразу перейти непосредственно к части со скриптом – кликните сюда.

Вот почему в Windows я использовал для создания скриншотов эту программу:
– создание скриншота возможно производить по заданной комбинации клавиш или автоматически с выставленным интервалом;
– возможность автоматического сохранения файла по выбранному заранее пути (в случае отсутствия папка будет создана) с именем по заданной маске (если у вас сотни скриншотов, использование в имени файла последовательности год-месяц-день_время очень упрощает обращение с ними);
– богатый выбор вариантов захвата области (весь экран, текущий монитор, активное окно, выбранная область и т.п.);
– в момент создания скриншота (если у вас выбрана не беззвучная звуковая схема) воспроизводится системный звук;
– и, конечно же, огромный выбор форматов для сохранения с настройками, доступными в зависимости от того, что вы выбрали.

На последнем пункте остановлюсь подробнее. Вы, скорее всего, знаете, что сейчас самых используемых форматов картинок, грубо говоря, два: .jpg (или .jpeg) и .png; плюс .gif для анимированных, но его не рассматриваем, т.к. у нас скриншоты. Так вот, IrfanView – программа, которая позволяет создавать изображения в формате .png, выставив им максимальную степень сжатия – 9ую, а не используя неизвестное значение по умолчанию, как большинство программ работы с растровой графикой, в результате чего результирующий файл получается наименьшего объёма, но при этом всё так же качество не теряется.

Что касается .jpg, то в одном из обновлений программы для настроек сохранения в этом формате был добавлен пункт "Желаемый размер файла", который позволяет получить размер файла в заданных пределах путём автоматического изменения качества изображения. Так вот, в случаях, когда размер изображения (ширина x высота) большой и/или желаемый размер файла (в КиБ) маленький, процесс сохранения файла может занимать несколько секунд, в связи с чем создание большой вереницы идущих друг за другом скриншотов может оказаться проблематичным.

Я рекомендую сохранять скриншоты в формате .png (без потерь качества изображения) или в .jpg с настройками, нацеленными на качество. Позже вы сможете пересохранить готовые изображения в соответствии с вашими нуждами. В случае больших количеств в этом поможет пакетная (групповая) конвертация IrfanView (клавиша [B]).

! В ранних версиях программы выбранный формат сохранения скриншотов не отличался от настроек сохранения изображений из основного окна, в связи с чем при каждом запуске процедуры создания скриншотов (клавиша [C]) стоило убеждаться в том, что выбран правильный формат. Поэтому если вам завтра лететь в начало двухтысячных, и планируется использовать IrfanView, а, по правилам пользования Системой Изменения Временного Континуума, применение программных средств, произведённых позже Целевого Периода (ЦП), запрещено, используйте IrfanView актуальной для ЦП или более ранней версии. Сейчас скриншоты будут сохраняться в том же формате, какой был выбран в предыдущий раз до тех пор, пока вы сами их не выберете другой. А вот изменения настроек для формата (например, качество для .jpg) по-прежнему сохраняются глобально для всех операций. Но есть возможность использовать профили настроек форматов.

Вот какие настройки форматов для скриншотов обычно использую я:
– для .png
IrfanView .png settings
Настройки IrfanView для сохранения в .png

– для .jpg/.jpeg
IrfanView .jpg settings
Настройки IrfanView для сохранения в .jpg

Шаблон имени можно задать типа такого:
IrfanView_screenshot_%Y-%m-%d_%H.%M.%S
Тогда имя созданного файла будет выглядеть примерно так:
IrfanView_screenshot_2013-11-10_00.37.30.png

Это автоматически позволяет хранить файлы упорядоченными по времени создания при выборе в системе "Упорядочивать по имени". Дополнительным бонусом является то, что даже при копировании файла или пересохранении в другой формат/с другими настройками позже, данные об изначальном времени создания всё равно сохранятся.

Теперь часть, посвящённая автоматизации.

В моём сценарии используется рассмотренный в предыдущем посте PowerMenu. Кроме того, IrfanView предусматривает использование с помощью командной строки, но на момент, когда я захотел упростить процесс создания скриншотов, это не учитывалось, в результате имею то, что получилось.

Скрипт написан на JScript. В нём достаточно подробные комментарии, что может быть полезно тем, кто интересуется Windows Script Host (WSH).

! Замечания: WSH входит "в комплект поставки" Windows начиная с 98й версии, и жив поныне, но для систем, которые моложе Windows XP, добавлены неучтённые в моём скрипте моменты, в связи с чем, в таком "как есть" виде он без дополнительной доработки не функционирует должным образом.

При выполнении скрипта происходят следующие операции:
1. Ожидание в течение 25 сек. для загрузки самой системы (он был помещён в автозагрузку);
2. Запуск IrfanView;
3. Имитация нажатия клавиши [C] в окне программы для активации функции снятия скриншотов;
4. Имитация нажатия [Enter] для подтверждения параметров скриншотосоздания;
! Параметры для создания скриншотов необходимо задать в ручную до использования скрипта. Также при необходимости внесения изменений в параметры, это производится опять же вручную.
5. Запуск PowerMenu в режиме скрытия собственного значка;
6. Сворачивание в системный трей окна с заголовком IrfanView, который при активации скриншотинга сворачивается на Панель инструментов.

Сам скрипт (сохраните в файл с расширением .js):

// *******************************************************
// *****    Скрипт для автоматического выполнения    *****
// **    некоторых действий при загрузке компьютера    ***

// Михаил Винаков. 9 марта 2009г.

// 1. Запуск программы, сворачивающей приложения в трей;
// 2. Запуск IrfanView;
// 3. Включение функции снятия скриншота;
// 4. Сворачивание IrfanView в трей
// *******************************************************

// *** Начало сценария

// Описание обязательной переменной

var oObject = WScript.CreateObject("WScript.Shell");

// *** Описание переменных


var cCommand = "%COMSPEC% /c";

// Команда запуска command.com с закрытием окна

var cPowerMenu = "C:\\_Programs_\\PowerMenu\\PowerMenu";

// Путь к программе PowerMenu

var cPowerMenuOpt1 = " -hideself on";

// Опция скрытия собственного значка в трее

var cPowerMenuOpt2 = " -minimized on IrfanView";

// Опция свёртывания в трей окон с заголовком IrfanView

var cIrfanView = "C:\\_Programs_\\IrfanView\\i_view32";

// Путь к экзешнику IrfanView

    WScript.Sleep(25000);

// Приостановка сценария на 25 сек.

// *** Последовательный запуск команд

    oObject.Run(cIrfanView);

// Запуск IrfanView
 

    WScript.Sleep(2000);
// Приостановка сценария для загрузки IrfanView

    oObject.AppActivate("IrfanView"); 

// Передача фокуса IrfanView
 

    WScript.Sleep(200);
// Приостановка сценария на 0.2 сек.
 

    oObject.SendKeys("c");
// Нажимаем [C] для запуска опции кэпчеринга экрана
 

    WScript.Sleep(200);
// Приостановка сценария на 0.2 сек.
 

    oObject.SendKeys("~");
// Нажимаем [Enter] для старта кэпчеринга экрана
 

    WScript.Sleep(200);
// Приостановка сценария на 0.2 сек.

    oObject.Run(cPowerMenu);

// Запускается PowerMenu
 

    WScript.Sleep(200);
// Приостановка сценария на 0.2 сек.

    oObject.Run(cCommand + cPowerMenu + cPowerMenuOpt1, 0, 0);

// Скрытие значка PowerMenu, завершения не ждать (последний 0))
// Параметры запуска окон (предпоследняя цифра):
// 0 - скрытое (не отображается)
// 1 - развёрнутое на весь экран (максимизированное)
// 4 - обычное (стандартный размер)
// 7 - свёрнутое (минимизированное)


    WScript.Sleep(500);

// Приостановка сценария на 0.5 сек.

    oObject.Run(cCommand + cPowerMenu + cPowerMenuOpt2, 0, 0);

// Сворачиваем окна с заголовком "IrfanView" (о параметрах - выше)

// *** Конец сценария


Некоторые пояснения:
– сценарий намеренно снабжён излишними комментариями, начинающимися с последовательности символов "//", каждое действие описано, хотя не требуется комментировать повторяющиеся команды каждый раз (писалось на случай, если я захочу что-то подправить через сто лет, а документации уже не найти); все комментарии могут быть удалены для уменьшения файла (хотя он и так не особо огромен, а при обработке скрипта игнорируется), но понимание кода без комментариев пострадает;
– временные задержки WScript.Sleep() указаны в милисекундах и могут быть изменены в зависимости от быстродействия вашей машины; совсем убирать задержки между имитируемыми нажатиями клавиш не стоит, а вот 25-секундную остановку для прогрузки Windows стоит изменить под свою систему;
– шапка с финтифлюшками добавлена не бахвальства ради, а в соответствии с рекомендациями понимающих в деле написания скриптов людей;
– изначально большая часть комментариев располагалась справа от исполняемого кода, здесь расположение комментариев изменено по соображению удобочитаемости с экранов различных девайсов;
– пути к исполняемым файлам (i_view32.exe и powermenu.exe – в коде упущены расширения файлов) следует изменить в соответствии с вашими данными.

! Оговорка: Из-за того, что мы имитируем нажатие клавиш человеком, на использование скрипта накладываются некоторые логичные ограничения:
– Перед нажатием клавиш скрипт активирует окно IrfanView даже если активно другое, но если в этот момент сторонний процесс (или человек) вручную активирует другое окно или приложение, нажатия клавиш [C] и [Enter] уйдут не туда. К фатальным последствиям это не приведёт, но активировать скриншотосоздание придётся вручную, вызвав IrfanView из трея, нажав клавиши пальцами и снова свернуть в трей из контекстного меню, добавляемого при запущенном PowerMenu;
– Если до момента сворачивания IrfanView в трей у вас имеются и другие запущенные экземпляры программы (например, вы просматривали фото так же в IrfanView) или открыта папка, имя которой начинается с IrfanView, они также будет свёрнуты в системный трей.

В связи с этим предлагаю дождаться выполнения скрипта до момента сворачивания IrfanView в трей (вы можете наблюдать процесс открытия окна с параметрами создания скриншотов и закрытия его при имитации клавиши [Enter]) и уже после этого приступать к дальнейшей работе.

Ссылки:
IrfanView можно скачать на официальном сайте или архивом с моего Гугл Диска (работать будет уже после распаковки), сразу с русским языком по умолчанию, аддонами и некоторыми произведёнными настройками.
PowerMenu берите также с Диска.

2 комментария:

  1. Спасибо большое за этот пост. Оказался очень полезным и крайне актуальным.

    ОтветитьУдалить

Если у вас есть что сказать и/или вы не согласны с изложенным в посте – оставьте комментарий. Регистрации не требуется.

If you think I'm wrong and/or you have to say something – fill free to write comment. No sign up required.