Войти

Показать полную графическую версию : Определение нажатой клавиши


Enforcer7
26-04-2012, 16:48
У меня вопрос к знающим людям - может ли батник определить, какая клавиша была нажата по его запросу? Ну или хотя бы отличить как-то нажатие на Enter от всех остальных клавиш?

Morpheus
26-04-2012, 19:26
может ли батник определить, какая клавиша была нажата по его запросу? »
CHOICE (http://www.robvanderwoude.com/choice.php) /?
Вы лучше опишите, чего хотите добиться.

Enforcer7
26-04-2012, 20:02
Ситуация такая: выводится некоторая информация, для продолжения работы скрипта нужно нажать кнопку Enter, для выхода - любую другую. Choice тут не подходит, к сожалению...

Morpheus
26-04-2012, 20:38
Enforcer7, есть такой вариант:
@echo off

set /p end=Press ENTER to continue!

if "%end%"=="" (goto cont) else (goto :eof)

:cont

Enforcer7
26-04-2012, 20:46
Morpheus, так я уже пытался извернутся. При нажатии на Enter мы действительно получим пустую переменную, а в противном случае консоль будет дожидаться, пока мы не завершим ввод переменной. Не совсем то, что нужно...

Iska
27-04-2012, 02:38
Enforcer7,

1. Вам обязательно реализацию встроенными средствами?
2. Простое «Y/N» в «choice.exe » — вместо «Enter/Any key» — Вас никак не устраивает?
3. Что скажете насчёт использования PowerShell?

Anonymоus
27-04-2012, 08:42
Enforcer7, используйте утилиту hs_readkey из набора утилит hs_packet. В сети живой ссылки не нашел, поэтому залил вам на файлообменник (http://rghost.ru/37790537). Сканкод Enter'а = 13.

Enforcer7
28-04-2012, 10:50
Конечно, хотелось бы решить эту проблему встроенными средствами... Все-таки не всегда получается использовать дополнительные утилиты...

Iska
28-04-2012, 11:10
Enforcer7, хотелось бы услышать ответы и на остальные вопросы (2 и 3).

Anonymоus
28-04-2012, 20:56
Enforcer7, насчет использования только встроенных средств - скажите, а в этом самом батнике что-то обрабатывается в цикле? Т.е. он работает непрерывно, и нужно не прерывая его работы, ожидать нажатия enter? Если да, то вот такой вот демонстрационный образец:



@Echo Off
If Exist "%temp%\stop.flag" Del "%temp%\stop.flag"

:: Запуск второй копии внутри первой
:: (для организации примитивного управления вторым запущенным процессом)
If "%SelfStart%"=="" (
Set SelfStart=yes
Start /B "" "%~nx0"
GoTo ControlThread
)

:: Именно тут крутится основной скрипт
:WorkThread
:: Ерунда со счетчиком в виде имитации полезной нагрузки
Cls
Set /A i+=1
Echo [%i%]
Ping -n 2 127.0.0.1>nul
:: А вот тут проверка на наличие файла, дающего сигнал о выходе
:: Естественно, что вместо выхода можно совершать любое нужное действие, главное -
:: время от времени опрашивать наличие файла, что совсем не блокирует работу
:: основного скрипта ожиданием ввода от пользователя
If Exist "%temp%\stop.flag" Exit
GoTo WorkThread


:: Создание файла завершения работы по нажатию Enter
:ControlThread
Set Input=
Set /P Input=
If "%Input%"=="" (Echo.>"%temp%\stop.flag") Else (GoTo ControlThread)
Exit

Iska
29-04-2012, 00:55
Anonymоus, вопрос не в «Enter», а в «любой клавише». Во всех примерах с «set /p» можно без устали «бомбить» пакетный файл AnyKey'ями — а он всё равно будет ожидать нажатия «Enter» для завершения ввода.




© OSzone.net 2001-2012