Войти

Показать полную графическую версию : изменение программы waiter.exe


TheFox
23-01-2011, 02:47
Есть очень полезная программка, которую я использую в батнике, называется WAITER.exe. Она делает паузу в батнике, отсчитывает указанное количество секунд и завершается, выполнение батника продолжается. Причем тип завершение влияет на errorlevel. Если дождаться завершения отсчета или нажать ctrl+a, errorlevel 0, если нажать любую другую клавишу, то errorlevel 1. Возможно ли каким-то образом влезть в тело exe'шника и поменять так, чтобы errorlevel был 0 при завершении отсчета и при нажатии любой клавиши, а нажатие ctrl+a давало errorlevel 1?

Вот выдержка из описания, идущего с прогой:

DESCRIPTION
Waiter counts down for a default of five seconds, then terminates with ERRORLEVEL 0. If the user presses a key during countdown, waiter terminates with ERRORLEVEL 1.

A hidden feature allows the user to terminate with ERRORLEVEL 0 by pressing ctrl-A. This allows the impatient user to override the wait, but take the default action.
PARAMETERS

waiter [-q -s seconds] msgline1 msgline2....

заранее благодарен.

Busla
23-01-2011, 13:34
Проще написать заново этот waiter
А в чём состоит более общая задача?

TheFox
23-01-2011, 15:02
задача довольно-таки простая - запущенная в теле батника с параметром секунд, программа отсчитывает указанное число секунд, после чего завершается и выполнение батника продолжается. Но самая главная для меня функция - возможность завершить отсчет до истечения таймера со следующими условиями:
нажатие какого-то сочетания клавиш (ctrl+a например) результирует в errorlevel 1, а нажатие любой клавиши - errorlevel 0. Окончание отсчета так же результирует в errorlevel 0.

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

Был бы очень признателен за помощь!

amel27
24-01-2011, 06:52
нажатие какого-то сочетания клавиш (ctrl+a например) результирует в errorlevel 1, а нажатие любой клавиши - errorlevel 0. Окончание отсчета так же результирует в errorlevel 0 »если вывод на консоль оставшегося времени не важен (в постановке задачи отсутствует), то можно преобразовать исходную таблицу истинности одной строчкой батника (выделено цветом):
@echo off
(waiter -s 10 2>nul||echo #)|findstr/irc:"Waiting: *0" /c:"#">nul

echo ERRORLEVEL:%ERRORLEVEL%
pause>nul

TheFox
27-01-2011, 12:17
выполнение такого кода во всех вариантах (дождаться окончания счетчика, нажатия эникея, сочетание контрол+а) дает результат errorlevel 1. В чем смысл не понял :(

amel27
27-01-2011, 14:48
TheFox, у меня на XP вроде нормально работает... а смысл - уберите в конце ">nul", тогда перед ERRORLEVEL:0 должно быть выведено для окончания счетчика "Waiting: 0", для эникея что-то типа "# iting: 9", для Ctrl+A перед ERRORLEVEL:1 должно быть пусто

TheFox
27-01-2011, 19:45
не очень пока въехал, но попробую поиграться, спасибо...

TheFox
30-01-2011, 18:09
На другом форуме помогли с редактированием файла. Так что выкладываю, может кому пригодится.
errorlevel'ы такие:
ctrl+a - 1
anykey - 0
wait - 0

с findstr пока не попробовал, времени нет. Но обязательно попробую и отпишусь...




© OSzone.net 2001-2012