Какие возможности имеются в командном файле для привлечения внимания пользователя в случае какого-либо события? Команды ECHO во многих случаях недостаточно, ведь помимо просто вывода текста хотелось бы:

  • «поднимать» окно командного файла наверх (в смысле Z-order, конечно) или
  • показывать всплывающее окно с текстом и значками, показывающими серьёзность события (ошибка, предупреждение, событие)


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

Поднять окно командного файла

Чтобы поднять наверх окно командного файла, можно использовать возможности WSH: подготавливаем скрипт activate.js, который использует метод WshShell.AppActivate для окна, заголовок которого передаётся параметром командной строки:

var title = WScript.Arguments.Unnamed(0);
var wshshell = WScript.CreateObject("WScript.Shell");
wshshell.AppActivate(title);

Затем в командном файле устанавливаем заголовок окна и в нужный момент вызываем activate.js:

@echo off
set window_title=Мой командник
title %window_title%
rem Здесь выполняются команды...
if errorlevel 1 cscript //nologo activate.js "%window_title%" & pause

То есть если командный файл выполнился успешно, он тихо закрывается, не отвлекая пользователя. Если возникла ситуация, о которой нужно проинформировать пользователя, то окно поднимается наверх, показывая информацию об ошибке.

Для наглядности будет полезно выделить цветом информацию об ошибке.

Показать всплывающее сообщение

Всплывающее сообщение MessageBox содержит текст и значок, это выглядит красивее, чем консольное окно, но после его закрытия пользователю придётся искать окно командного файла вручную.

Всплывающее окно WshShell.Popup

Этот вариант использует возможности WSH и не требует установки  дополнительных программ.
Используется метод WshShell.Popup в скрипте popup.js

var text = WScript.Arguments.Unnamed(0);
var title = WScript.Arguments.Unnamed(1);
var wshshell = WScript.CreateObject("WScript.Shell");
wshshell.Popup(text,0,title,16);

Соответственно, командный файл вызывает его в случае ошибки:

cscript //nologo popup.js "Сбой процедуры полного резервного копирования. Сервер недоступен." "Резервное копирование"

Всплывающее окно NHMB

Программа nhmb также показывает всплывающее окно, позволяя задавать символы перевода строки в параметрах (и соответственно, в командном файле), а также отображая таймаут в заголовке окна.

nhmb.exe -esc:~~ "Сбой процедуры полного резервного копирования.~~nСервер недоступен." "Резервное копирование" error 60


В заголовке окна отображается время в секундах (55), оставшееся до автоматического закрытия окна и продолжения работы командного файла.

Сообщение пользователю в cmd
Метки:    

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

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