批量选择替代方案,用于无需暂停检测密

时间:2017-04-28 13:44:56

标签: batch-file

问题是:这里有没有办法检测批量按键而不停顿聊天,游戏等脚本的整个脚本?现在我知道有用的命令叫做xcopy。我用它来检测和提取按下的键,例如Enter。但是它会暂停整个脚本并等待确认,而选择可能不会暂停脚本,但无法执行无声无效密钥以及检测特定的密钥

3 个答案:

答案 0 :(得分:1)

虽然一点也不简单,但网站Dostips.com完全实现了游戏"Snake",只使用了Batch,包括非阻塞输入。

基本上,批处理文件会生成第二个命令提示符,该命令提示符在输入时阻塞。收到输入后,它将被路由到第一个“主”程序,该程序轮询输入文件。

就像我说的那样,不是直截了当或简单,但它是可行的。

答案 1 :(得分:1)

纯批次并不简单,但可能。

这是一个使用两个线程的示例 第一个线程:keyCheck等待密钥 第二个线程:mainFunc计数,直到按下一个键。

@echo off

setlocal DisableDelayedExpansion
set "func=%~0"
for /F "delims=\" %%X in ("%func:*\=%") do set "func=%%X"
if ":" == "%func:~0,1%" (
    goto %func%
)

( "%~d0\:keyCheck\..%~pnx0" ) > lock.tmp | "%~d0\:mainFunc\..%~pnx0"
echo Ende
exit /b

REM *** Thread1 - waiting for key
:keyCheck
for /f skip^=1^ delims^=^ eol^= %%A in ('replace.exe ? . /u /w') do for /f delims^=^ eol^= %%B in ("%%A") do (
    set key=%%B
)
exit /b

REM *** Thread2 - Counting up
:mainFunc
setlocal EnableDelayedExpansion
for /F %%# in ('copy /Z "%~dpf0" NUL') do set "CR=%%#"

set "lastTime="
set cnt=0
:loop
set /a cnt+=1
set /p "=Stop with any key !cnt! !CR!" < nul
call :waitOrStop
goto :loop

:waitOrStop
REM Check if a key was pressed, then the lock is released
(
  (
    rem 
  ) 2> lock.tmp && ( 
    echo(
    exit
  )
) 2> nul

set "now=%time:~-2%"
if "!now!" NEQ "!lastTime!" (
set "lastTime=!now!"
    exit /b
)
goto :waitOrStop

答案 2 :(得分:0)

尽管可能,但使用纯Batch命令没有简单方法。最简单的方法是使用专门设计的第三方.exe程序,就像我的GetKey.exe辅助文件一样。该程序从键盘获取一个键,并通过ERRORLEVEL返回一个指示按下键的值。处理所有键:ASCII字符作为正值返回,扩展键(功能键,光标控制键等)作为负值返回。如果给出/ N开关,则GetKey.exe不等待:如果未按下某个键,则返回的值为零。

这是一个使用GetKey.exe辅助文件的非常简单的示例程序:

@echo off
setlocal EnableDelayedExpansion

rem Simple example of GetKey.exe auxiliary program to detect keys pressed

rem Get a Return (ASCII 13) CR character
for /F %%a in ('copy /Z "%~F0" NUL') do set "CR=%%a"

cls
echo Press a key at any moment; press ESC key to end
echo/

set i=0
:loop
set /A i+=1
set /P "=%i%!CR!" < NUL
GetKey /N
if %errorlevel% equ 0 goto loop
echo/
echo Key pressed: %errorlevel%
if %errorlevel% neq 27 goto loop

您可以从this site下载GetKey.exe辅助程序;您也可以下载SHOWKEYCODES.BAT程序,该程序显示GetKey.exe为键盘中的所有键返回的代码,包括Shift-,Ctrl-和Alt-组合。

PS - 如果您不愿意使用第三方.exe程序,只需认为原始choice命令也是一个35 KB大小的.exe文件,但我的GetKey.exe文件只是1536字节大小。您可以查看我的几个辅助.exe文件以及这些程序的用户在同一链接上发布的回复。