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

По завершении программа nhmb возвращает код нажатой кнопки (IDOK, IDCANCEL и т.д.), по которому командный файл выполняет соответствующие команды.
В программе nhmb имеется таймер для выполнения действия, назначенного по умолчанию, если пользователь не сделал никакого выбора – командный файл продолжит свою работу вместо бесконечного ожидания.
Пример nhmb – вывод сообщения
Сообщение-информация с текстом Архивирование выполнено и заголовком Архивирование:
nhmb "Архивирование выполнено" Архивирование Information
Первый параметр задает текст сообщения и заключен в кавычки, т.к. содержит пробелы. Если требуется вставить символы форматирования, следует использовать \n для перевода строки и \t для табуляции.
Второй параметр задает заголовок окна сообщения и должен быть заключен в кавычки, если содержит пробелы.
Третий параметр указывает, что должен быть использован значок Information и кнопка OK.

Так как не задано время ожидания, программа не завершится до тех пор, пока пользователь не нажмет на кнопку.
Пример nhmb с тайм-аутом
Сообщение-вопрос Доступ к базе данных будет закрыт. Продолжить? с кнопками Да/Нет и тайм-аутом 3 минуты:
nhmb "Доступ к базе данных будет закрыт. Продолжить?" "Подтвердите запуск" ^
"Question|YesNo|DefButton2" 180
Третий параметр задает значок-вопрос (Question)и кнопки Да/Нет, причем кнопка Нет будет кнопкой по умолчанию (DefButton2).
Четвертый параметр задает время ожидания 3 минуты (180 секунд). В заголовке окна будет идти отсчет оставшегося времени. Если пользователь нажмет Да или Нет, то программа вернет соответственно IDYES или IDNO. Если пользователь не в течение трех минут не нажмет никакую кнопку, то программа закроется сама и вернет IDNO.

Пример nhmb – обработка кода нажатой кнопки
Обработка кода нажатой кнопки заключается в сравнении кода возврата с кодами IDOK, IDCANCEL и т.д. (их численные значения указаны в справке программы). Для предыдущего примера можно написать следующий командный файл:
nhmb "Доступ к базе данных будет закрыт. Продолжить?" "Подтвердите запуск" ^
"Question|YesNo|DefButton2" 180
if errorlevel 7 goto End
if errorlevel 6 goto Begin
goto End
:Begin
rem Собственно действия с базой данных...
:End
Командный файл сравнивает результат выполнения сначала с кодом IDNO (значение 7), затем IDYES (значение 6) и передает управление соответственно на завершение файла или на выполнение действий с базой данных.
Почему nhmb
П сравнению с другими вариантами вывода всплывающего окна сообщения в bat файле, такими как скрипт WSH/VBScript, программа nhmb обладает преимуществами:
ВОЗМОЖНОСТИ ОФОРМЛЕНИЯ | ФУНКЦИЯ ТАЙМЕРА | ПРОСТОТА ИСПОЛЬЗОВАНИЯ |
Все типы значков Все комбинации кнопок Текст с переводами строк и TAB | Отображение оставшегося времени в заголовке Выполнение команды по умолчанию | Не требует программирования, строку запуска можно сформировать в онлайн генераторе |
Командная строка
Параметры командной строки
nhmb.exe [-esc:<упр.символ>] <текст сообщения> <заголовок> <флаги> [<ожидание>] -esc:<упр.символ> Позволяет задать управляющий символ для перевода строки и табуляции вместо используемой по умолчанию обратной косой черты. <текст сообщения> Текст сообщения <заголовок> Текст заголовка <флаги> Вид значка Information Значок с символом i Question Значок с вопросительным знаком Warning Значок с восклицательным знаком Error Значок со знаком STOP Кнопки: Ok ОК OkCancel ОК, Отменить RetryCancel Повторить, Отменить YesNo Да, Нет YesNoCancel Да, Нет, Отменить AbortRetryIgnore Прервать, Повтор, Пропустить CancelTryContinue Отменить, Повторить, Продолжить Кнопка по умолчанию: DefButton1 Первая кнопка DefButton2 Вторая кнопка DefButton3 Третья кнопка DefButton4 Четвертая кнопка <ожидание> Время ожидания выбора пользователя в секундах Код возврата 1 IDOK Была нажата кнопка ОК 2 IDCANCEL Была нажата кнопка Отменить 3 IDABORT Была нажата кнопка Прервать 4 IDRETRY Была нажата кнопка Повтор 5 IDIGNORE Была нажата кнопка Пропустить 6 IDYES Была нажата кнопка Да 7 IDNO Была нажата кнопка Нет 10 IDTRYAGAIN Была нажата кнопка Повторить 11 IDCONTINUE Была нажата кнопка Продолжить
Генератор строки запуска
Используйте этот генератор для формирования командной строки программы nhmb и скопируйте готовую команду в ваш bat файл.
Командная строка
nhmb.exe "Message text line #1\nMessage text line\t(TAB) #2\nMessage text line #3" "Caption" "Information|Ok" "60"
Справочная информация
Описание параметров, коды кнопок можно посмотреть в описании функции MessageBox.
Узнать больше
Загрузка nhmb
Прямая ссылка для скачивания nhmb
Программа не требует установки, работает в Windows XP SP3 и старше.
При загрузке ПК у меня не всегда срабатывает таймер ожидания: Окно программы с вопросом ожидания открывается, но таймер нажатия кнопки по умолчанию не запущен. Соответственно, кнопка по умолчанию сама не нажимается.
Добрый день, а насколько часто так происходит?
Ну вот сейчас позапускал батник вручную: 15 из 15 запусков запустилось с работающим таймером. А при запуске ПК, когда батник лежит в автозагрузке, таймер не запускается в 50% случаев. Windows 10 корпоративная 2016
Спасибо за информацию, сделаю обновление программы на днях
поставил timeout /t 30 перед запуском утилиты, стало лучше: из 5 загрузок, только 1 раз не сработал таймер
Получается, такой вариант «отложенной» загрузки.
Сделал новую версию с изменением в части таймера, заодно исправил пару ошибок.
Напишите, пожалуйста, как работает таймер.
Сделал ещё изменение, которое может влиять на работу программы во время запуска Windows, новая версия 1.2.1.4.
Здравствуйте.
Вопрос по отработке нажатой кнопки.
Хочу чтобы появлялось первое окно с вопросом Да/Нет, и если было нажато Да, то появлялось сообщение с кнопкой Ок.
Можно ли так сделать?
У меня такой код (такой же как в примере):
@echo off
start nhmb «Остановить программу?» «Stop» ^
«Question|YesNo» 5
if errorlevel 6 goto Begin
if errorlevel 7 goto End
goto End
:Begin
*тут что-то нужно написать, чтобы появлялось сообщение, что программа остановлена и кнопка ОК*
:End
exit
(останавливать ничего не нужно, это шуточное сообщение будет)
Подскажите, пожалуйста, как правильно написать концовку кода.
Здравствуйте, команда

nhmb "Программа остановлена" "Заголовок" "OK|information"
показыает окно с сообщением и кнопкой ОК.
Что-то не получается(
Еще раз что хочу: сначала появляется окно с выбором да/нет. Потом, если в первом окне было нажато «да», появляется второе окно с кнопкой ок. Если выбрано нет, то ничего не происходило.
У меня сейчас такой код (ниже) и два окна появляются одновременно, а я хочу, чтобы последовательно.
start nhmb "Остановить программу?" "Stop" "YesNo"
if errorlevel 6 goto Begin
if errorlevel 7 goto End
:Begin
nhmb "Программа остановлена" "Заголовок" "OK"
:End
Это потому что первое окно запускается через
start
, он здесь не нужен. И условияif
у вас не в том порядке.nhmb "Остановить программу?" "Stop" "YesNo"
if errorlevel 7 goto End
:Begin
nhmb "Программа остановлена" "Заголовок" "OK"
:End
Супер! Спасибо!
Если еще научите скрывать консольное окно, то вообще будет идеально.
Раньше я юзал команду start, но теперь её нельзя использовать.
Я не понял куда вставлять тот скрипт, что вы ниже в комментариях писали.
Помогите, пожалуйста, решить вопрос с консольным окном — буду очень благодарен.
выложил примеры на диск, запускайте
скрипт.js
, он запускает 1.bat с нужным параметром.Здравствуйте. Подскажите, можно ли как-то сделать подавление командной строки? «@echo off» не срабатывает.
Здравствуйте, если нужно, чтобы окно не было видно, то здесь есть https://nhutils.ru/blog/скрыть-консольное-окно/
Или про что-то другое?
Да, необходимо скрыть консольное окно. Не совсем понятно, куда нужно добавить строки из скрипта по вашей ссылке. Имею следующий батник:
Это команды для запуска bat файла.
Скрипт my.js запускает bat файл, чтобы не показывалось окно:
Сам скрипт лучше запускать через wscript
Эту команду можно вставить, например, в ярлык или т.д.
кстати, в данном случае можно и проще сделать, если запускать через start
тогда перед выходом запустится nhmb в отдельном окне, а bat закроется. Это если нужно, чтобы окно закрылось сразу после выполнения xcopy, но до завершения nhmb.
Здравствуйте! Спасибо за программу, подскажите, а можно-ли сделать такое — же сообщение, только на перезагрузку системы? С таймером и возможностью отмены?
Добрый день! Перезагрузку или выключение компьютера с запросом пользователя и с тайм-аутом можно сделать комбинацией nhmb и nhss, то есть по отмене выходить из bat файла, а по тайм-ауту или подтверждению запускать nhss -r.
Спасибо за программу!
Есть предложение добавить в программу несколько звуков с регулировкой их длительности и выводом на динамики (не на встроенную «пищалку», т.к. у многих современных ПК она отсутствует) .
Средствами CMD этого не добиться :(
Есть же стандартные звуки, которые проигрываются при открытии окна сообщения, они настраиваются в панели управления (восклицание, вопрос и т.д.), или вопрос о чем-то другом?
PS: У Вас на странице нет ссылки на загрузку программы :(
Сам себе отвечу:
http://nhutils.ru/Download/nhmb-1.1.2.zip
:)
Спасибо за комментарий, добавил ссылку!
Спасибо! Есть предложение, при возможности, добавить параметр времени неактивности кнопок — т.е., если в момент появления окна будет случайно нажата клавиша enter или пробел, это не привело к ошибочному выбору до прочтения сообщения (как, например, в Firefox, при загрузке файла, нельзя сразу же нажать OK).
Спасибо за предложение, попробуем.