Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Определение нажатой клавиши (http://forum.oszone.net/showthread.php?t=233562)

Enforcer7 26-04-2012 16:48 1906272

Определение нажатой клавиши
 
У меня вопрос к знающим людям - может ли батник определить, какая клавиша была нажата по его запросу? Ну или хотя бы отличить как-то нажатие на Enter от всех остальных клавиш?

Morpheus 26-04-2012 19:26 1906356

Цитата:

Цитата Enforcer7
может ли батник определить, какая клавиша была нажата по его запросу? »

Код:

CHOICE /?
Вы лучше опишите, чего хотите добиться.

Enforcer7 26-04-2012 20:02 1906376

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

Morpheus 26-04-2012 20:38 1906389

Enforcer7, есть такой вариант:
Код:

@echo off

set /p end=Press ENTER to continue!

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

:cont


Enforcer7 26-04-2012 20:46 1906394

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

Iska 27-04-2012 02:38 1906513

Enforcer7,

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

Anonymоus 27-04-2012 08:42 1906554

Enforcer7, используйте утилиту hs_readkey из набора утилит hs_packet. В сети живой ссылки не нашел, поэтому залил вам на файлообменник. Сканкод Enter'а = 13.

Enforcer7 28-04-2012 10:50 1907188

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

Iska 28-04-2012 11:10 1907192

Enforcer7, хотелось бы услышать ответы и на остальные вопросы (2 и 3).

Anonymоus 28-04-2012 20:56 1907483

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 1907587

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


Время: 20:45.

Время: 20:45.
© OSzone.net 2001-