Программа MB показывает стандартное системное окно сообщения (MessageBox).

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

Позднее в программу был добавлен таймер для выполнения действия, назначенного по умолчанию, если пользователь не сделал никакого выбора.

Программа позволяет задать все стандартные типы значков (информация, вопрос, предупреждение, ошибка) и комбинации кнопок (ОК, ОК/Отмена, Да/Нет и т.д.).

По завершении программа возвращает код нажатой кнопки (IDOK и т.д.), по которому командный файл выполняет те или иные команды.

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

Загрузка nhmb

Прямая ссылка для скачивания nhmb

Программа не требует установки, работает в Windows XP SP3 и старше.

Вывод сообщения в nhmb

Сообщение-информация с текстом Архивирование выполнено и заголовком Архивирование:

nhmb "Архивирование выполнено" Архивирование Information

Первый параметр задает текст сообщения и заключен в кавычки, т.к. содержит пробелы. Если требуется вставить символы форматирования, следует использовать \n для перевода строки и \t для табуляции.

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

Третий параметр указывает, что должен быть использован значок Information и кнопка OK.

вывод сообщения в nhmb

Так как не задано время ожидания, программа не завершится до тех пор, пока пользователь не нажмет на кнопку.

Вопрос с тайм-аутом в 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) и передает управление соответственно на завершение файла или на выполнение действий с базой данных.

Справочная информация

Описание параметров, коды кнопок можно посмотреть в описании функции MessageBox.

nhmb: 20 комментариев

  • 09.07.2020 в 11:09
    Постоянная ссылка

    Здравствуйте.
    Вопрос по отработке нажатой кнопки.
    Хочу чтобы появлялось первое окно с вопросом Да/Нет, и если было нажато Да, то появлялось сообщение с кнопкой Ок.
    Можно ли так сделать?
    У меня такой код (такой же как в примере):
    @echo off
    start nhmb «Остановить программу?» «Stop» ^
    «Question|YesNo» 5
    if errorlevel 6 goto Begin
    if errorlevel 7 goto End
    goto End
    :Begin
    *тут что-то нужно написать, чтобы появлялось сообщение, что программа остановлена и кнопка ОК*
    :End
    exit
    (останавливать ничего не нужно, это шуточное сообщение будет)
    Подскажите, пожалуйста, как правильно написать концовку кода.

    Ответить
    • 09.07.2020 в 22:39
      Постоянная ссылка

      Здравствуйте, команда
      nhmb "Программа остановлена" "Заголовок" "OK|information"
      показыает окно с сообщением и кнопкой ОК.

      Ответить
      • 10.07.2020 в 13:24
        Постоянная ссылка

        Что-то не получается(
        Еще раз что хочу: сначала появляется окно с выбором да/нет. Потом, если в первом окне было нажато «да», появляется второе окно с кнопкой ок. Если выбрано нет, то ничего не происходило.
        У меня сейчас такой код (ниже) и два окна появляются одновременно, а я хочу, чтобы последовательно.
        start nhmb "Остановить программу?" "Stop" "YesNo"
        if errorlevel 6 goto Begin
        if errorlevel 7 goto End
        :Begin
        nhmb "Программа остановлена" "Заголовок" "OK"
        :End

        Ответить
        • 11.07.2020 в 08:11
          Постоянная ссылка

          Это потому что первое окно запускается через start, он здесь не нужен. И условия if у вас не в том порядке.
          nhmb "Остановить программу?" "Stop" "YesNo"
          if errorlevel 7 goto End
          :Begin
          nhmb "Программа остановлена" "Заголовок" "OK"
          :End

          Ответить
          • 13.07.2020 в 09:15
            Постоянная ссылка

            Супер! Спасибо!
            Если еще научите скрывать консольное окно, то вообще будет идеально.
            Раньше я юзал команду start, но теперь её нельзя использовать.
            Я не понял куда вставлять тот скрипт, что вы ниже в комментариях писали.
            Помогите, пожалуйста, решить вопрос с консольным окном — буду очень благодарен.

  • 22.11.2018 в 20:59
    Постоянная ссылка

    Здравствуйте. Подскажите, можно ли как-то сделать подавление командной строки? «@echo off» не срабатывает.

    Ответить
      • 22.11.2018 в 22:29
        Постоянная ссылка

        Да, необходимо скрыть консольное окно. Не совсем понятно, куда нужно добавить строки из скрипта по вашей ссылке. Имею следующий батник:

        @echo off
        setlocal enableextensions enabledelayedexpansion
        set "sSourceFolder=folder 3"
        2>nul md "%sSourceFolder%"
        xcopy.exe /e /i /y ".\folder 1\folder 2\%sSourceFolder%" "%sSourceFolder%"
        nhmb "Установлено управление контроллером XBOX" "Уведомление" ^
         "Information|OK|DefButton1" 0
        endlocal
        exit /b 0
        Ответить
        • 23.11.2018 в 21:36
          Постоянная ссылка

          Это команды для запуска bat файла.

          Скрипт my.js запускает bat файл, чтобы не показывалось окно:

          var wsh_shell = WScript.CreateObject("WScript.Shell");
          var result = wsh_shell.Run("my.cmd",0,true);

          Сам скрипт лучше запускать через wscript

          wscript.exe my.js

          Эту команду можно вставить, например, в ярлык или т.д.

          Ответить
        • 23.11.2018 в 21:54
          Постоянная ссылка

          кстати, в данном случае можно и проще сделать, если запускать через start

          start nhmb ...

          тогда перед выходом запустится nhmb в отдельном окне, а bat закроется. Это если нужно, чтобы окно закрылось сразу после выполнения xcopy, но до завершения nhmb.

          Ответить
  • 01.11.2017 в 13:03
    Постоянная ссылка

    Здравствуйте! Спасибо за программу, подскажите, а можно-ли сделать такое — же сообщение, только на перезагрузку системы? С таймером и возможностью отмены?

    Ответить
    • 01.11.2017 в 14:27
      Постоянная ссылка

      Добрый день! Перезагрузку или выключение компьютера с запросом пользователя и с тайм-аутом можно сделать комбинацией nhmb и nhss, то есть по отмене выходить из bat файла, а по тайм-ауту или подтверждению запускать nhss -r.

      Ответить
  • 28.06.2016 в 15:08
    Постоянная ссылка

    Спасибо за программу!
    Есть предложение добавить в программу несколько звуков с регулировкой их длительности и выводом на динамики (не на встроенную «пищалку», т.к. у многих современных ПК она отсутствует) .
    Средствами CMD этого не добиться :(

    Ответить
    • 30.06.2016 в 06:05
      Постоянная ссылка

      Есть же стандартные звуки, которые проигрываются при открытии окна сообщения, они настраиваются в панели управления (восклицание, вопрос и т.д.), или вопрос о чем-то другом?

      Ответить
  • 09.01.2016 в 19:56
    Постоянная ссылка

    Спасибо! Есть предложение, при возможности, добавить параметр времени неактивности кнопок — т.е., если в момент появления окна будет случайно нажата клавиша enter или пробел, это не привело к ошибочному выбору до прочтения сообщения (как, например, в Firefox, при загрузке файла, нельзя сразу же нажать OK).

    Ответить

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

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