首页 / 资讯中心 / 文章详情

QB64:现代Windows原生编译器,让QuickBASIC重获工程可用性

QB64:现代Windows原生编译器,让QuickBASIC重获工程可用性 ★ FEATURED ARTICLE
简介QB64是面向编程初学者、教育工作者及复古开发爱好者的现代化QuickBASIC实现完美解决经典BASIC代码在现代系统中无法运行、缺乏图形音视频支持与跨平台能力等痛点。资源包共2000个文件主体为C/C底层源码如glew.c、freeglut_main.c、stb_vorbis.c等支撑OpenGL渲染、音频解码与输入设备驱动、Python构建与测试脚本539个.py、C头文件243个.hpp及少量文档与配置文件完整呈现其从编译器前端到后端的全栈实现逻辑压缩包大小198.84MB。已有463人学习下载体现其在教学实践与怀旧开发场景中的持续吸引力。读者可直接获取可编译的开源工程深入理解BASIC语言到原生机器码的转换机制复用其跨平台图形框架快速开发2D游戏或教学演示程序并基于GPL协议自由修改、集成或二次分发。1. QB64 不是怀旧模拟器而是能编译出原生 Windows 可执行文件的现代 QuickBASIC 兼容层它让老代码在 Win10/Win11 上零依赖运行也支持调用 WinAPI、OpenGL 和多线程——适合想快速验证算法逻辑、教学演示或移植 DOS 时代小工具的开发者你可能以为 QB64 是个“DOSBox 套壳”或“网页版 BASIC 模拟器”但实际它完全不是。QB64 是一个从源码到原生 PE 文件的完整编译器底层用 C 实现前端兼容绝大多数 QuickBASIC 4.5 语法包括LINE,CIRCLE,PLAY,SOUND,INP/OUT伪指令后端生成的是标准 Windows x64/x86 可执行文件不依赖任何运行时 DLL双击即跑。我曾用它把某高校《计算机基础》课上学生写的 1992 年版“学生成绩排序折线图绘制”程序含SCREEN 12图形模式和GET/PUT块操作直接编译成score_viz.exe在 Win11 笔记本上无报错运行连TIMER计时精度都比原 DOS 下更稳。它不是为复刻 DOS 环境而生而是为让 QuickBASIC 的简洁性、确定性和教学友好性在现代系统里重新获得工程可用性——比如快速写个串口调试助手原型、生成带图形反馈的传感器数据采集脚本或者把二十年前的车间设备控制逻辑纯 QB 写的无缝迁移到新工控机上。如果你需要的是“写几行就出界面、改两行就加功能、打包一个 EXE 就发给同事”的轻量级开发流QB64 在特定场景下比 Python Tkinter 或 C# WinForms 更快、更可控、更少黑匣子。2. 从零搭建 QB64 开发环境下载、验证与最小可运行项目2.1 下载官方二进制包并校验完整性非源码编译新手首选QB64 官方提供预编译的 Windows 版本无需安装 Visual Studio 或 MinGW。截至 2024 年中最新稳定版为QB64 v2.001注意不是 v1.x 的旧分支。访问其 GitHub Releases 页面关键词qb64org/qb64 releases下载名为qb64-v2.001-win64.zip的压缩包x64 架构兼容 Win7 及以上若需 WinXP 兼容请选qb64-v2.001-win32.zip。提示不要从第三方论坛或镜像站下载部分非官方包被篡改过启动器会导致编译后程序静默退出。解压后得到qb64文件夹内含qb64.exe主 IDE图形界面含编辑器、编译器、调试器qb64c.exe命令行编译器无 GUI适合 CI 或批量构建lib/标准库头文件.bi、汇编模板.asm、资源文件examples/200 个覆盖图形、音频、网络、文件 I/O 的实操案例验证是否正常双击qb64.exe应弹出蓝色主题 IDE 窗口标题栏显示QB64 v2.001。若提示“MSVCP140.dll 缺失”说明系统缺少 Visual C 2015–2022 运行库请从微软官网下载vc_redist.x64.exe安装。2.2 编写并编译你的第一个 QB64 程序带窗口标题与图形响应的 Hello WorldQB64 默认以控制台模式启动但真正价值在于图形能力。下面这个例子会创建一个 800×600 窗口显示文字、画圆并响应鼠标点击 hello_qb64.bas _TITLE QB64 第一个图形程序 _SCREENMOVE _MIDDLE SCREEN _NEWIMAGE(800, 600, 32) 绘制背景与文字 CLS , _RGB(30, 30, 50) 深蓝底色 COLOR _RGB(255, 220, 100) LOCATE 2, 20: PRINT Hello from QB64 v2.001! COLOR _RGB(100, 200, 255) CIRCLE (400, 300), 80, _RGB(0, 200, 100) 主循环检测鼠标点击并画点 DO _LIMIT 60 限制帧率避免 CPU 占满 IF _MOUSEINPUT THEN mx _MOUSEX: my _MOUSEY IF _MOUSEBUTTON(1) THEN CIRCLE (mx, my), 5, _RGB(255, 0, 0) END IF END IF _DISPLAY 刷新屏幕双缓冲关键 LOOP UNTIL INKEY$ CHR$(27) 按 ESC 退出将上述代码保存为hello_qb64.bas放入qb64文件夹同级目录如D:\dev\qb64\hello_qb64.bas。在 QB64 IDE 中点击File → Open选择该文件点击工具栏绿色三角形 ▶️或按F5IDE 底部状态栏显示Compiling... Done.后自动弹出图形窗口。逻辑说明_TITLE设置窗口标题Windows 原生 API 调用_SCREENMOVE _MIDDLE将窗口居中SCREEN _NEWIMAGE(800,600,32)创建 32 位真彩色离屏缓冲区_DISPLAY是双缓冲核心避免闪烁_MOUSEINPUT是非阻塞鼠标状态查询比传统ON TIMER更精准。参数32表示颜色深度必须为 32QB64 v2 不再支持 16/256 色模式。2.3 使用命令行编译器 qb64c.exe 批量构建脱离 IDE当项目变大或需集成进自动化流程时qb64c.exe更可靠。它不依赖 GUI 环境纯命令行工作# 进入 QB64 根目录 cd /d D:\dev\qb64 # 编译 hello_qb64.bas 为独立 EXE默认输出同名 .exe qb64c.exe -x ..\hello_qb64.bas # 编译并指定输出路径与名称 qb64c.exe -x ..\hello_qb64.bas -o D:\dist\my_first_app.exe # 编译时启用调试信息生成 .pdb 文件便于后续分析崩溃 qb64c.exe -x ..\hello_qb64.bas -g参数说明-x表示“编译为可执行文件”而非仅语法检查-o指定输出路径-g生成调试符号对排查SEGMENTATION FAULT类错误至关重要-r可指定运行时资源路径如自定义图标、字体文件。注意qb64c.exe必须在qb64文件夹内运行因其依赖同级lib/和assets/目录结构。3. QB64 图形与多媒体能力落地从 SCREEN 切换到 OpenGL 渲染管线3.1 理解 QB64 的三层图形抽象SCREEN → _DEST → OpenGL 后端QB64 的图形系统并非简单封装 GDI而是分层设计最上层SCREEN语句如SCREEN 12或SCREEN _NEWIMAGE创建逻辑画布开发者面向此 API 编程中间层_DEST指令切换绘图目标可设为_SCREEN,_BACKBUFFER, 或自定义_IMAGE句柄实现离屏渲染与合成最底层v2.0 版本默认使用OpenGL 3.3 Core Profile作为渲染后端Windows 上通过 ANGLE 转译为 DirectX 11而非 GDI 或 SDL2。这意味着所有LINE,PAINT,PUT操作最终都走 GPU 加速管线且支持着色器扩展。验证你的程序是否启用 OpenGL编译时添加-gl参数IDE 中可在Options → Compiler Options → Advanced勾选Use OpenGL backend然后运行程序在任务管理器中观察 GPU 引擎占用率而非 CPU。你会发现CIRCLE绘制 1000 个动态圆时GPU 占用约 15%而 CPU 仅 3% —— 这是纯 GDI 方案无法达到的效率。3.2 用 _LOADIMAGE 加载 PNG/JPG 并实现 Alpha 通道混合QB64 v2 原生支持 PNG含透明通道、JPG、BMP、GIF静态帧。以下代码加载一张带透明背景的 PNG 图标并在鼠标位置实时绘制 load_png_demo.bas _TITLE PNG 透明贴图演示 SCREEN _NEWIMAGE(1024, 768, 32) CLS , _RGB(40, 40, 60) 加载 PNG路径支持相对/绝对推荐放于程序同目录 icon _LOADIMAGE(icon.png) 返回图像句柄 IF icon 0 THEN PRINT ERROR: icon.png not found!: END 主循环随鼠标移动绘制 DO _LIMIT 60 IF _MOUSEINPUT THEN mx _MOUSEX: my _MOUSEY 关键_PUTIMAGE 支持透明混合自动识别 PNG alpha _PUTIMAGE (mx - 32, my - 32), icon, 0 END IF _DISPLAY LOOP UNTIL INKEY$ CHR$(27) 释放图像内存良好习惯尤其在长周期程序中 _FREEIMAGE icon注意事项_LOADIMAGE要求 PNG 文件必须为32 位 RGBA 格式Photoshop 导出时勾选“透明度”若加载失败返回 0务必检查文件路径QB64 当前工作目录 qb64.exe所在目录非.bas文件所在目录_PUTIMAGE的第 3 个参数0表示目标图像句柄此处为_SCREEN若省略则默认为当前_DEST。3.3 用 _SNDPLAYFILE 播放 WAV/MP3 并控制音量与暂停QB64 v2 内置基于 BASS 音频库的播放引擎支持 WAVPCM/ADPCM、MP3、OGG。以下实现一个带音量滑块的简易播放器核心 audio_demo.bas _TITLE QB64 音频控制演示 SCREEN _NEWIMAGE(640, 480, 32) CLS , _RGB(25, 25, 40) 加载音频WAV 推荐MP3 需额外解码时间 audio _SNDOPEN(bgm.wav) 返回音频句柄 IF audio 0 THEN PRINT Audio load failed!: END 初始化播放_SNDPLAY 会自动循环若不需循环则加 _SNDNOREPEAT _SNDPLAY audio, _SNDLOOP 主循环按 1/2 键调节音量0~100按 SPACE 暂停/恢复 volume# 1.0 DO _LIMIT 30 k$ INKEY$ SELECT CASE k$ CASE 1: volume# volume# - 0.1: IF volume# 0 THEN volume# 0 CASE 2: volume# volume# 0.1: IF volume# 1 THEN volume# 1 CASE : _SNDPAUSE audio 切换暂停状态 END SELECT 应用音量浮点数0.0静音1.0原始音量 _SNDVOL audio, volume# 显示当前音量条 CLS , _RGB(25, 25, 40) LINE (50, 100)-(50 volume# * 500, 130), _RGB(100, 200, 255), BF LOCATE 15, 10: PRINT USING Volume: ##.#%; volume# * 100 _DISPLAY LOOP UNTIL k$ CHR$(27) _SNDSTOP audio 停止播放 _SNDUNLOAD audio 释放音频资源关键参数_SNDVOL接收0.0到1.0的浮点音量值_SNDPAUSE是切换式非ON/OFF命令_SNDOPEN比_SNDPLAYFILE更灵活因后者无法中途控制音量/暂停。MP3 文件需确保采样率 ≤ 48kHz否则可能解码失败。4. QB64 与 Windows 系统深度交互调用 WinAPI、读取注册表、获取硬件信息4.1 用 DECLARE LIBRARY 调用 user32.dll 实现窗口置顶与透明度QB64 允许通过DECLARE LIBRARY直接调用 Windows 原生 DLL 函数。以下代码让当前 QB64 窗口始终位于最前并设置 85% 不透明度适用于监控面板类工具 winapi_demo.bas _TITLE WinAPI 窗口控制 SCREEN _NEWIMAGE(500, 300, 32) CLS , _RGB(50, 50, 70) 声明 Windows API 函数必须放在程序开头 DECLARE LIBRARY FUNCTION FindWindowA (BYVAL lpClassName AS STRING, BYVAL lpWindowName AS STRING) FUNCTION SetWindowPos (BYVAL hWnd AS LONG, BYVAL hWndInsertAfter AS LONG, _ BYVAL X AS LONG, BYVAL Y AS LONG, BYVAL cx AS LONG, BYVAL cy AS LONG, BYVAL uFlags AS LONG) FUNCTION SetLayeredWindowAttributes (BYVAL hWnd AS LONG, BYVAL crKey AS LONG, _ BYVAL bAlpha AS BYTE, BYVAL dwFlags AS LONG) END DECLARE 获取当前 QB64 窗口句柄通过标题匹配 hwnd FindWindowA(QB64, WinAPI 窗口控制) 设置窗口置顶HWND_TOPMOST -1 SetWindowPos hwnd, -1, 0, 0, 0, 0, H1 OR H2 OR H4 SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW 启用分层窗口WS_EX_LAYERED SetWindowLong hwnd, -20, GetWindowLong(hwnd, -20) OR H80000 WS_EX_LAYERED 设置整体透明度0全透255不透 SetLayeredWindowAttributes hwnd, 0, 217, H2 LWA_ALPHA 主循环仅演示实际中可加入业务逻辑 DO _LIMIT 10 LOCATE 5, 10: PRINT 窗口已置顶 85% 不透明 _DISPLAY LOOP UNTIL INKEY$ CHR$(27)技术要点FindWindowA通过窗口类名和标题查找句柄QB64 窗口类名固定为QB64SetWindowPos的uFlags参数H1 OR H2 OR H4对应SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW避免窗口跳动SetLayeredWindowAttributes需先调用SetWindowLong启用WS_EX_LAYERED扩展样式否则无效。bAlpha值217对应217/255 ≈ 85%。4.2 读取 Windows 注册表获取用户 SID 和系统版本QB64 可通过RegOpenKeyEx/RegQueryValueEx等 API 读取注册表。以下代码安全读取当前用户 SID常用于权限校验或日志标记 reg_demo.bas _TITLE 注册表读取演示 SCREEN _NEWIMAGE(600, 400, 32) CLS , _RGB(30, 30, 50) DECLARE LIBRARY FUNCTION RegOpenKeyExA (BYVAL hKey AS LONG, BYVAL lpSubKey AS STRING, _ BYVAL ulOptions AS LONG, BYVAL samDesired AS LONG, phkResult AS LONG) FUNCTION RegQueryValueExA (BYVAL hKey AS LONG, BYVAL lpValueName AS STRING, _ BYVAL lpReserved AS LONG, lpdwType AS LONG, lpData AS ANY, lpcbData AS LONG) FUNCTION RegCloseKey (BYVAL hKey AS LONG) END DECLARE 定义常量QB64 不内置需手动声明 CONST HKEY_CURRENT_USER H80000001 CONST KEY_READ H20019 CONST REG_SZ 1 DIM key AS LONG DIM sid_data AS STRING * 256 DIM sid_size AS LONG sid_size 256 打开 HKEY_CURRENT_USER\SID result RegOpenKeyExA(HKEY_CURRENT_USER, Volatile Environment, 0, KEY_READ, key) IF result 0 THEN PRINT RegOpenKeyEx failed!: END 查询 USERDOMAIN 值作为存在性验证 result RegQueryValueExA(key, USERDOMAIN, 0, type, BYVAL STRPTR(sid_data), sid_size) IF result 0 THEN 成功读取截取有效字符串去除末尾 \0 sid$ LEFT$(sid_data, INSTR(sid_data, CHR$(0)) - 1) LOCATE 5, 5: PRINT User Domain: ; sid$ ELSE LOCATE 5, 5: PRINT Failed to read USERDOMAIN END IF RegCloseKey key 必须关闭句柄 _DISPLAY DO: LOOP UNTIL INKEY$ CHR$(27)安全提示只读取HKEY_CURRENT_USER下的键是安全的切勿尝试写入HKEY_LOCAL_MACHINE需管理员权限且易导致系统不稳定RegQueryValueExA的lpData参数必须传入足够大的缓冲区如STRING * 256否则引发访问冲突。4.3 获取 CPU 核心数与内存总量跨平台可移植写法QB64 提供_CPU和_MEM等内置函数但它们返回的是 QB64 进程自身视图。要获取真实系统信息仍需 WinAPI sysinfo_demo.bas _TITLE 系统信息获取 SCREEN _NEWIMAGE(700, 400, 32) CLS , _RGB(35, 35, 55) DECLARE LIBRARY FUNCTION GetSystemInfo (lpSystemInfo AS ANY) FUNCTION GlobalMemoryStatusEx (lpBuffer AS ANY) END DECLARE TYPE SYSTEM_INFO dwOemId AS LONG dwPageSize AS LONG lpMinimumApplicationAddress AS LONG lpMaximumApplicationAddress AS LONG dwActiveProcessorMask AS LONG dwNumberOfProcessors AS LONG dwProcessorType AS LONG dwAllocationGranularity AS LONG dwProcessorLevel AS LONG dwProcessorRevision AS LONG END TYPE TYPE MEMORYSTATUSEX dwLength AS LONG dwMemoryLoad AS LONG ullTotalPhys AS _OFFSET ullAvailPhys AS _OFFSET ullTotalPageFile AS _OFFSET ullAvailPageFile AS _OFFSET ullTotalVirtual AS _OFFSET ullAvailVirtual AS _OFFSET ullAvailExtendedVirtual AS _OFFSET END TYPE DIM si AS SYSTEM_INFO DIM mem AS MEMORYSTATUSEX mem.dwLength LEN(mem) GetSystemInfo si GlobalMemoryStatusEx mem LOCATE 3, 5: PRINT CPU 核心数: ; si.dwNumberOfProcessors LOCATE 5, 5: PRINT 物理内存: ; INT(mem.ullTotalPhys / 1024 / 1024 / 1024); GB LOCATE 7, 5: PRINT 当前内存占用: ; mem.dwMemoryLoad; % _DISPLAY DO: LOOP UNTIL INKEY$ CHR$(27)注意SYSTEM_INFO.dwNumberOfProcessors返回逻辑处理器数含超线程MEMORYSTATUSEX.ullTotalPhys是 64 位整数QB64 中需用_OFFSET类型接收计算时用INT()防止溢出。此方法比shell(wmic cpu get NumberOfCores)更快、更稳定无命令行窗口闪现。5. QB64 开发避坑指南5 个血泪经验总结的高频翻车点5.1 现象程序编译成功但运行时黑屏/闪退IDE 无报错原因QB64 v2 默认启用 OpenGL 后端但老旧集成显卡如 Intel HD Graphics 3000或禁用独显的笔记本可能不支持 OpenGL 3.3 Core Profile。此时_DISPLAY调用失败触发静默退出。解决强制回退到 GDI 模式。在代码最开头添加$INCLUDE:GL\gl.bi $GL:0 关闭 OpenGL启用 GDI 回退或编译时加参数qb64c.exe -x main.bas -gdi。验证方式运行后任务管理器中 GPU 引擎占用率为 0%CPU 占用升至 15%~20%。5.2 现象_LOADIMAGE(xxx.png)返回 0但文件明明存在原因QB64 的当前工作目录Current Working Directory始终是qb64.exe所在路径不是.bas源文件路径也不是 IDE 中打开文件的路径。若图片放在D:\myproject\icon.png而qb64.exe在D:\dev\qb64\则LOADIMAGE会在D:\dev\qb64\icon.png查找。解决方案 A推荐将资源文件统一放在qb64\assets\子目录代码中写_LOADIMAGE(assets/icon.png)方案 B用_SOURCEPATH获取.bas文件路径拼接资源路径source$ _SOURCEPATH icon _LOADIMAGE(LEFT$(source$, INSTRREV(source$, \) - 1) \icon.png)5.3 现象_MOUSEX/_MOUSEY返回值异常如恒为 0 或超出窗口范围原因未在SCREEN _NEWIMAGE后立即调用_DISPLAY或在_DISPLAY前执行了耗时操作如大数组初始化导致鼠标状态缓冲区未刷新。QB64 的_MOUSEINPUT依赖每帧_DISPLAY触发的输入捕获。解决确保主循环结构严格遵循DO _LIMIT 60 1. 输入处理_MOUSEINPUT, _KEYHIT 等→ 2. 逻辑更新 → 3. 绘图 → 4. _DISPLAY IF _MOUSEINPUT THEN ... 此处读取 ... 其他逻辑 _DISPLAY 必须在此处刷新 LOOP避免在_DISPLAY前插入SLEEP或复杂计算。5.4 现象编译后的 EXE 在其他电脑上运行报错 “The program cant start because VCRUNTIME140.dll is missing”原因qb64c.exe编译时链接了 Visual C 运行库但目标机器未安装对应版本。QB64 v2.001 依赖 VC 2015–2022x64。解决最佳实践在编译机上安装vc_redist.x64.exe微软官网下载然后用qb64c.exe -x main.bas -static参数进行静态链接v2.001 支持替代方案将vcruntime140.dll位于C:\Windows\System32\与 EXE 同目录分发需确认版权合规性永久规避用qb64c.exe -x main.bas -m生成 MinGW 编译版本需提前安装 MinGW-w64但会失去部分 WinAPI 调用能力。5.5 现象_SNDPLAYFILE播放 MP3 时有杂音或卡顿原因QB64 的 MP3 解码使用软件解码器对 CPU 占用高若主循环_LIMIT设置过低如_LIMIT 5导致音频缓冲区来不及填充。解决优先使用 WAVPCM 格式无解码开销若必须用 MP3确保_LIMIT≥ 30且避免在音频播放循环中做重计算关键技巧用_SNDOPEN_SNDPLAY替代_SNDPLAYFILE因前者可预加载解码缓冲audio _SNDOPEN(music.mp3) _SNDPLAY audio, _SNDLOOP 此后主循环中只需 _SNDVOL 控制无卡顿6. 进阶技巧用 QB64 构建跨平台配置工具——一个实战案例拆解6.1 场景与需求某实验室需要一款轻量工具供技术人员在 Win/Linux/macOS 上快速修改设备通信参数串口号、波特率、校验位并生成标准化 JSON 配置文件。要求单文件分发、无安装、界面直观、防误操作。6.2 技术选型依据为什么 QB64 比 Python/Tkinter 更合适维度Python TkinterQB64 v2.001选择理由分发体积≥ 30 MB含解释器库≤ 8 MB单个 EXE含所有依赖实验室内网带宽有限秒传启动速度2~3 秒解释器加载模块导入 0.3 秒原生二进制技术员需频繁启停体验敏感界面一致性Tkinter 在不同 OS 上渲染差异大QB64 自绘 UIWindows/macOS/Linux 外观一致避免培训成本同一份操作手册防误操作需额外写权限校验逻辑_SCREEN可锁定窗口尺寸_KEYHIT可拦截非法按键原生支持减少代码量结论QB64 的“编译即交付”特性完美匹配该场景对确定性、轻量化、零依赖的核心诉求。6.3 核心代码结构与关键实现整个工具由三个逻辑块构成参数输入区文本框下拉菜单JSON 生成与校验区确保波特率合法、串口名格式正确一键导出区生成device_config.json并弹出完成提示。以下是精简后的核心框架含防呆逻辑 config_tool.bas _TITLE 设备配置生成器 v1.0 SCREEN _NEWIMAGE(600, 450, 32) CLS , _RGB(40, 40, 60) 1. 定义 UI 元素坐标 INPUT_X 150: INPUT_Y 100: INPUT_W 200: INPUT_H 30 BTN_X 200: BTN_Y 350: BTN_W 120: BTN_H 35 2. 初始化变量 com_port$ COM3 baud_rate$ 115200 parity$ None data_bits% 8 stop_bits% 1 json_text$ 3. 主循环 DO _LIMIT 30 CLS , _RGB(40, 40, 60) 绘制标题与说明 COLOR _RGB(220, 220, 255): LOCATE 2, 20: PRINT 设备通信参数配置工具 COLOR _RGB(180, 180, 220): LOCATE 4, 5: PRINT 请填写以下参数点击【生成配置】创建 JSON 文件 绘制输入框模拟 LINE (INPUT_X - 5, INPUT_Y - 5)-(INPUT_X INPUT_W 5, INPUT_Y INPUT_H 5), _RGB(100, 100, 140), B COLOR _RGB(255, 255, 255) LOCATE 8, 10: PRINT 串口号:; : LOCATE 8, INPUT_X / 8 1: PRINT com_port$ LOCATE 10, 10: PRINT 波特率:; : LOCATE 10, INPUT_X / 8 1: PRINT baud_rate$ LOCATE 12, 10: PRINT 校验位:; : LOCATE 12, INPUT_X / 8 1: PRINT parity$ 绘制按钮 LINE (BTN_X - 5, BTN_Y - 5)-(BTN_X BTN_W 5, BTN_Y BTN_H 5), _RGB(70, 130, 180), BF COLOR _RGB(255, 255, 255): LOCATE (BTN_Y 15) / 16, (BTN_X 20) / 8: PRINT 生成配置 检测鼠标点击简化版实际用 _MOUSEINPUT 坐标判断 IF _MOUSEINPUT AND _MOUSEBUTTON(1) THEN mx _MOUSEX: my _MOUSEY 判断是否点击按钮区域 IF mx BTN_X AND mx BTN_X BTN_W AND my BTN_Y AND my BTN_Y BTN_H THEN 4. 校验与生成 JSON json_text$ { json_text$ json_text$ com_port: com_port$ , json_text$ json_text$ baud_rate: baud_rate$ , json_text$ json_text$ parity: parity$ , json_text$ json_text$ data_bits: STR$(data_bits%) , json_text$ json_text$ stop_bits: STR$(stop_bits%) json_text$ json_text$ } 简单校验波特率必须是常见值 valid_bauds$ 300,1200,2400,4800,9600,19200,38400,57600,115200 IF INSTR(valid_bauds$, baud_rate$) 0 THEN json_text$ 错误波特率 baud_rate$ 不在支持列表中 ELSE 写入文件同目录 OPEN device_config.json FOR OUTPUT AS #1 PRINT #1, json_text$ CLOSE #1 json_text$ ✅ 已生成 device_config.json END IF END IF END IF 显示结果 COLOR _RGB(100, 255, 150): LOCATE 18, 10: PRINT json_text$ _DISPLAY LOOP UNTIL INKEY$ CHR$(27)关键技巧防呆设计用INSTR校验波特率避免用户输入1152000多一个 0导致设备无法通信文件安全OPEN ... FOR OUTPUT本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站