You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Batch与getkey.exe:如何同时捕获按键并执行SET /P命令?

批处理结合getkey.exe实现计算器按键检测方案

核心需求

用批处理配合Aacini开发的getkey.exe制作计算器,需实现:

  • 捕获用户按键,区分字符/数字和F1这类功能键
  • 字符/数字输入:将按键内容传入SET /P用于计算式输入
  • 功能键触发:打开对应菜单

getkey.exe通过设置errorlevel返回对应按键ID,不能直接同时运行getkey.exe和SET /P——因为SET /P是等待用户输入流,而getkey.exe是主动捕获按键,需先通过getkey.exe判断按键类型,再分支执行对应逻辑。

实现示例代码

@echo off
setlocal enabledelayedexpansion

:mainLoop
cls
echo 计算器操作提示:按F1打开菜单,输入数字/运算符开始计算
getkey.exe

:: 判断F1功能键(F1对应的errorlevel为59,具体键值可查getkey文档)
if %errorlevel% equ 59 (
    goto :menu
) else (
    :: 筛选可打印字符(ASCII码32-126对应errorlevel范围)
    if %errorlevel% geq 32 if %errorlevel% leq 126 (
        :: 将errorlevel转换为对应字符
        for /f "delims=" %%a in ('powershell -command "[char]%errorlevel%"') do set "inputChar=%%a"
        goto :inputHandler
    ) else (
        :: 忽略不可打印的非功能键,回到主循环
        goto :mainLoop
    )
)

:inputHandler
:: 将捕获的字符预填入计算式输入框
set /p "calcExpr=输入计算式:!inputChar!"
:: 此处可添加计算逻辑,比如调用calc.exe计算结果
echo 计算式:!calcExpr!
pause >nul
goto :mainLoop

:menu
cls
echo === 菜单选项 ===
echo 1. 清除当前计算式
echo 2. 查看计算历史
echo 3. 返回计算器主界面
getkey.exe

:: 处理菜单按键(数字1-3对应errorlevel49-51)
if %errorlevel% equ 49 (set "calcExpr=" & goto :mainLoop)
if %errorlevel% equ 50 (goto :showHistory)
if %errorlevel% equ 51 (goto :mainLoop)
:: 无效按键则停留在菜单
goto :menu

:showHistory
cls
echo === 计算历史记录 ===
:: 此处可添加历史记录读取/展示逻辑
echo 暂无历史记录
pause >nul
goto :menu

关键说明

  1. 执行顺序:必须先用getkey.exe捕获按键,根据errorlevel判断类型后,再决定是进入输入流程还是菜单流程,不能并行运行getkey.exe和SET /P
  2. 按键判断:
    • 功能键有固定的errorlevel值(比如F1是59),需参考getkey.exe的文档获取对应键值
    • 可打印字符的errorlevel对应其ASCII码(32-126),通过PowerShell将数值转换为字符后,可预填入SET /P的输入框
  3. 循环逻辑:主循环保证程序持续运行,处理完按键后回到初始状态等待下一次操作

内容的提问来源于stack exchange,提问作者ItsSuperPlayz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:02:33