跨平台无障碍版随机数生成器

关于软件

  • 软件名称: 随机数生成器 (Random Numbers Generator)
  • 软件版本: 1.0.0.0
  • 运行平台: Microsoft Windows 操作系统
  • 官方网站cingzeoi.github.io

一、 软件概述

1.1 产品简介

本程序是一款由信息无障碍专家 张赐荣 先生开发的运行在 Windows 操作系统上的完全遵循无障碍规范的随机数生成器实用程序,专为视力障碍人士打造,以解决视障者生成随机数困难,操作网页随机数生成器不便的问题。同时,本程序还提供开源的 Android 版

本软件严格遵循 WCAG等国际无障碍标准要求设计,力求保证所有用户,特别是依赖屏幕阅读器的视障人士,能独立、高效、便捷地完成随机数生成工作。

1.2 设计理念

  • 操作完全无障碍:所有交互元素均支持读屏浏览和键盘操作

  • 简洁高效:界面布局清晰,操作流程简单直观

  • 功能完备:满足从基础到高级的随机数生成需求

  • 稳定可靠:经严格测试,确保在各种使用场景下的工作稳定性


二、 功能特点

2.1 核心功能

2.1.1 灵活的参数配置
  • 最小值设置:支持 -65,536 至 65,536 范围内的任意整数
  • 最大值设置:支持 -65,536 至 65,536 范围内的任意整数
  • 生成数量:支持 1 至 1,024 个随机数的批量生成
  • 唯一性控制:可选生成不重复的唯一随机数
2.1.2 智能数据验证
  • 自动检测最小值与最大值的逻辑关系
  • 验证生成数量是否在有效范围内
  • 当选择"唯一"模式时,智能判断范围是否足够容纳指定数量的不重复值
  • 所有错误提示均通过标准 Windows 消息框呈现,保证屏幕阅读器可朗读
2.1.3 多样化排序方式
  • 乱序模式:保持随机生成时的原始顺序(默认)
  • 升序排列:从小到大排序
  • 降序排列:从大到小排序
  • 排序状态实时更新显示在右键菜单中,方便用户确认当前模式
2.1.4 便捷的数据导出
  • 复制单个:右键菜单快速复制当前选中的数字
  • 复制全部:一键复制所有生成的随机数到剪贴板
  • 复制内容自动以换行符分隔,便于粘贴到 Excel、记事本等应用

2.2 无障碍兼容

2.2.1 完整的键盘导航支持
  • Tab 键导航:可在所有控件间顺序切换焦点
  • Shift+Tab:反向切换焦点
  • Alt+ 快捷键 :所有控件均设置访问键(Access Key)
    • Alt+M:聚焦最小值输入框
    • Alt+X:聚焦最大值输入框
    • Alt+C:聚焦数量输入框
    • Alt+U:切换唯一性开关复选框
    • Alt+G:触发"生成"按钮事件
    • Alt+L:聚焦结果列表框
2.2.2 屏幕阅读器优化
  • 详细的标签说明:所有控件均配有清晰的文本标签说明其用途
  • 焦点管理:生成数据后自动聚焦到结果列表,并选中第一项
  • 状态反馈:排序菜单项使用勾选标记(Check Mark)显示当前模式
  • 标准控件:全部采用 Windows 原生控件,保证与 NVDA、JAWS、Narrator 等主流屏幕阅读器完美兼容
2.2.3 易于读取的错误提示信息
  • 所有错误和警告信息使用标准 Windows MessageBox
  • 提示内容简洁明确,包含具体解决方案建议
  • 消息框自动获得焦点,确保屏幕阅读器立即朗读

三、 下载、解压与运行

3.1 系统要求

  • 操作系统:Windows XP 及以上版本(32位/64位)
  • 内存:预留至少 512K RAM
  • 磁盘空间:至少预留 1MB 可用空间
  • 辅助技术兼容:NVDA 2017.3 及以上、Windows Narrator Win7 及以上。

3.2 下载程序

本程序为绿色软件,无需安装,请从以下链接下载

RandomNumbersGenerator.zip

随后解压该压缩包,打开运行其中的 "RandomNumbersGenerator.exe"。


四、 使用指南

4.1 基本操作流程

4.1.1 生成随机数
  1. 设置参数

    • 在"最小值"输入框中设定随机数的下限(默认:1)
    • 在"最大值"输入框中设定随机数的上限(默认:100)
    • 在"数量"输入框中设定需要生成的随机数个数(默认:10)
  2. 选择唯一性

    • 如需生成不重复的随机数,勾选"唯一"复选框
    • 若要允许重复值,保持取消勾选状态即可
  3. 执行生成动作

    • 点击"生成"按钮或按 Alt+G 快捷键
    • 生成的随机数将立即显示在下方的结果列表框中
  4. 查看结果

    • 程序自动聚焦到结果列表
    • 第一个数字自动被选中
    • 使用上下方向键浏览所有生成的数字
4.1.2 复制数据
  • 复制单个数字

    1. 在结果列表中选中目标数字
    2. 右键点击列表框
    3. 选择"复制当前"或按字母 "C"
    4. 数字已复制到剪贴板,可粘贴到任意应用
  • 复制全部数字

    1. 右键点击结果列表框
    2. 选择"复制全部"或按字母 "A"
    3. 所有数字以换行分隔格式复制到剪贴板
4.1.3 切换排序方式
  1. 右键点击结果列表框
  2. 将鼠标悬停在"排序方式"子菜单上
  3. 选择所需的排序模式:
    • 升序(A):从小到大排列
    • 降序(D):从大到小排列
    • 乱序(R):随机打乱排序
  4. 菜单项前的勾选标记指示当前激活的排序模式

4.2 高级使用技巧

4.2.1 使用上下箭头快速调整数值
  • 点击输入框右侧的上下箭头按钮可逐步增减数值
  • 无需手动输入,适合快速微调参数
4.2.2 批量生成大量数据
  • 最多可一次性生成 1,024 个随机数
  • 建议生成大量数据时使用"唯一"模式避免重复
  • 复制全部功能支持一键导出所有数据
4.2.3 负数范围支持
  • 支持生成负数随机数
  • 示例:最小值 -100,最大值 -1,可生成 -100 至 -1 之间的随机数
  • 示例:最小值 -50,最大值 50,可生成跨越零点的随机数

4.3 常见使用场景

场景一:抽奖活动
  • 设置最小值:1
  • 设置最大值:参与人数
  • 设置数量:中奖人数
  • 勾选"唯一":保证同一人不重复中奖
  • 点击"生成":获得中奖号码
场景二:随机分组
  • 设置最小值:1
  • 设置最大值:组数
  • 设置数量:总人数
  • 不勾选"唯一":允许多人同组
  • 点击"生成":每人分配一个组号
场景三:抽样调查
  • 设置最小值:1
  • 设置最大值:总体数量
  • 设置数量:样本数量
  • 勾选"唯一":确保不重复抽样
  • 点击"生成":获得样本编号

五、 错误处理与故障排除

5.1 常见错误提示

错误信息 原因 解决方案
"数值或生成数量超出有效范围。必须是 -65536 ~ 65536 之间,最多 1024 个。" 输入的最小值、最大值或数量超出允许范围 检查并调整参数至有效范围内
"最小值不能大于等于最大值!" 最小值设置大于或等于最大值 确保最小值严格小于最大值
"当前范围不足以生成 X 个唯一值。" 在勾选"唯一"模式下,指定范围内的可用数值少于已请求 数量 扩大数值范围或减少生成数量

5.2 无障碍相关故障排除

问题:屏幕阅读器无法朗读控件

解决方案

  1. 确保屏幕阅读器已启动并处于交互模式
  2. 尝试使用 Tab 键重新导航到控件
问题:快捷键无响应

解决方案

  1. 确认程序窗口处于聚焦活动状态(点击窗口标题栏)
  2. 检查是否与其他软件的快捷键冲突
问题:焦点未按预期跳转

解决方案

  1. 使用 Tab 键手动导航到目标控件
  2. 关闭并重新打开程序
  3. 重启屏幕阅读器软件

六、 技术规格

6.1 软件架构

  • 开发框架:AutoIt3 v3.3.14.5 及以上
  • 用户界面:传统Win32API 风格 GUI
  • 核心算法:Fisher-Yates 洗牌算法变种
  • 数据处理:基于数组的内存存储

6.2 性能指标

  • 最大生成数量:1,024 个
  • 数值范围:-65,536 至 65,536
  • 内存占用:峰值 < 1MB

6.3 兼容性

  • 操作系统:Windows XP SP3、Windows Vista、Windows 7、Windows 7 SP1、Windows 8.1、Windows 10、Windows 11等
  • 架构支持:x86、x64
  • 屏幕阅读器
    • NVDA 2017.3 及以上(推荐)
    • Windows Narrator (Windows 7/8/8.1/10/11 内置)

七、 隐私与安全

7.1 数据隐私

  • 本地运行:所有数据处理均在本地完成,不连接互联网
  • 不收集数据:程序不在本地(或在线)收集、存储或传输任何用户数据
  • 不记录日志:不生成任何使用日志或统计信息

7.2 安全性

  • 无网络权限:程序无需网络访问权限

八、 版权与许可

8.1 版权声明

Copyright © 2026 张赐荣. All Rights Reserved.

本软件及其相关文档的知识产权归 张赐荣 所有。

8.2 使用许可

  • 本软件为免费软件,允许个人和商业用途免费使用
  • 禁止反向工程、反编译或反汇编
  • 禁止未经授权的再分发或销售
  • 禁止移除或修改版权信息

8.3 免责声明

本软件按"原样"提供,不提供任何明示或暗示的担保。开发者不对因使用本软件造成的任何直接或间接损失承担责任。


附录

附录 A:快捷键参考表

快捷键 功能 适用场景
Alt+M 聚焦最小值输入框 快速设置下限
Alt+X 聚焦最大值输入框 快速设置上限
Alt+C 聚焦数量输入框 / 复制当前选中项 设置数量 / 复制单个数字
Alt+U 切换唯一性复选框 开启/关闭唯一模式
Alt+G 触发生成按钮 开始生成随机数
Alt+L 聚焦结果列表框 查看生成结果
A 复制全部数字 批量导出数据
O 打开排序子菜单 切换排序方式
O,A 升序排序 从小到大排列
O,D 降序排序 从大到小排列
O,R 乱序排序 恢复随机顺序
Tab 下一个控件 键盘浏览
Shift+Tab 上一个控件 反向浏览
↑↓ 列表项导航 浏览结果
Enter 确认/生成 执行操作
Esc 关闭消息框 取消操作

附录 B:无障碍设计检查清单

本软件已通过以下无障碍检查项检验:

  • x\] 所有功能可通过键盘完成

  • x\] 所有控件具有清晰的角色定义(Role)

  • x\] 焦点可见性明确

  • x\] 颜色不是唯一的信息传达方式

  • x\] 动态内容变化可被辅助技术感知

附录 C:软件源代码

本程序由信息无障碍专家张赐荣先生通过 au3 编写,以下是源代码,供学习参考。

au3 复制代码
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListBox.au3>
#include <Array.au3>

#NoTrayIcon

; <- 全局变量 ->
Global $g_aData[0] ; 存储生成的原始数据
Global $g_sSortMode = "Random" ; 默认乱序

; <- 界面设置 ->
Local $hGUI = GUICreate("随机数生成器", 320, 480)

GUICtrlCreateLabel("最小值 (&M):", 20, 20)
Local $idMin = GUICtrlCreateInput("1", 180, 17, 110, 20)
GUICtrlCreateUpdown($idMin)
GUICtrlSetLimit($idMin, 65536, -65536)

GUICtrlCreateLabel("最大值 (&X):", 20, 50)
Local $idMax = GUICtrlCreateInput("100", 180, 47, 110, 20)
GUICtrlCreateUpdown($idMax)
GUICtrlSetLimit($idMax, 65536, -65536)

GUICtrlCreateLabel("数量 (&C):", 20, 80)
Local $idCount = GUICtrlCreateInput("10", 180, 77, 110, 20)
GUICtrlCreateUpdown($idCount)
GUICtrlSetLimit($idCount, 1024, 1)

Local $idUnique = GUICtrlCreateCheckbox("唯一 (&U)", 20, 110)
Local $idBtnGenerate = GUICtrlCreateButton("生成 (&G)", 20, 140, 270, 40)

GUICtrlCreateLabel("结果 (&L):", 20, 190)
Local $idList = GUICtrlCreateList("", 20, 210, 270, 220, BitOR($WS_BORDER, $WS_VSCROLL, $LBS_NOTIFY))
GUICtrlSetState($idList, $GUI_DISABLE)

; <- 右键菜单 ->
Local $idContextMenu = GUICtrlCreateContextMenu($idList)
Local $idCopySelected = GUICtrlCreateMenuItem("复制当前 (&C)", $idContextMenu)
Local $idCopyAll = GUICtrlCreateMenuItem("复制全部 (&A)", $idContextMenu)
GUICtrlCreateMenuItem("", $idContextMenu) 

Local $idSortSub = GUICtrlCreateMenu("排序方式 (&O): 乱序", $idContextMenu)
Local $idSortAsc = GUICtrlCreateMenuItem("升序 (&A)", $idSortSub)
Local $idSortDesc = GUICtrlCreateMenuItem("降序 (&D)", $idSortSub)
Local $idSortRand = GUICtrlCreateMenuItem("乱序 (&R)", $idSortSub)
GUICtrlSetState($idSortRand, $GUI_CHECKED)

GUISetState(@SW_SHOW)

; <- 主循环 ->
While true
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $idBtnGenerate
            GenerateNumbers()
        Case $idCopySelected
            Local $iSel = _GUICtrlListBox_GetCurSel($idList)
            If $iSel <> -1 Then ClipPut(_GUICtrlListBox_GetText($idList, $iSel))
        Case $idCopyAll
            CopyAllFromList() ; 调用新函数,从列表框读取
        Case $idSortAsc
            UpdateSortMode("Asc", $idSortSub, $idSortAsc, $idSortDesc, $idSortRand)
        Case $idSortDesc
            UpdateSortMode("Desc", $idSortSub, $idSortAsc, $idSortDesc, $idSortRand)
        Case $idSortRand
            UpdateSortMode("Random", $idSortSub, $idSortAsc, $idSortDesc, $idSortRand)
    EndSwitch
WEnd

; <- 逻辑函数 ->
Func GenerateNumbers()
    Local $iMin = Int(GUICtrlRead($idMin)), $iMax = Int(GUICtrlRead($idMax)), $iNum = Int(GUICtrlRead($idCount))
    Local $bUnique = (GUICtrlRead($idUnique) = $GUI_CHECKED)

    If $iMin < -65536 Or $iMax > 65536 Or $iNum < 1 Or $iNum > 1024 Then
        MsgBox(48, "错误", "数值或生成数量超出有效范围。必须是 -65536 ~ 65536 之间,最多 1024 个。")
        Return
    EndIf
    If $iMin >= $iMax Then
        MsgBox(48, "提醒", "最小值不能大于等于最大值!")
        Return
    EndIf
    If $bUnique And ($iMax - $iMin + 1 < $iNum) Then
        MsgBox(48, "提醒", "当前范围不足以生成 " & $iNum & " 个唯一值。")
        Return
    EndIf

    ; 重置数组并生成数据
    Local $aNewData[0]
    While UBound($aNewData) < $iNum
        Local $iVal = Random($iMin, $iMax, 1)
        If Not $bUnique Or _ArraySearch($aNewData, $iVal) = -1 Then _ArrayAdd($aNewData, $iVal)
    WEnd

    $g_aData = $aNewData ; 更新全局数据
    RefreshList()
EndFunc

Func UpdateSortMode($sMode, $idSub, $idA, $idD, $idR)
    $g_sSortMode = $sMode
    GUICtrlSetState($idA, $sMode = "Asc" ? $GUI_CHECKED : $GUI_UNCHECKED)
    GUICtrlSetState($idD, $sMode = "Desc" ? $GUI_CHECKED : $GUI_UNCHECKED)
    GUICtrlSetState($idR, $sMode = "Random" ? $GUI_CHECKED : $GUI_UNCHECKED)

    Local $sTitle = "乱序"
    If $sMode = "Asc" Then $sTitle = "升序"
    If $sMode = "Desc" Then $sTitle = "降序"
    GUICtrlSetData($idSub, "排序方式 (&O): " & $sTitle)

    If UBound($g_aData) > 0 Then RefreshList()
EndFunc

Func RefreshList()
    Local $aDisplay = $g_aData
    If $g_sSortMode = "Asc" Then _ArraySort($aDisplay)
    If $g_sSortMode = "Desc" Then _ArraySort($aDisplay, 1)

    _GUICtrlListBox_BeginUpdate($idList)
    _GUICtrlListBox_ResetContent($idList)
    For $i = 0 To UBound($aDisplay) - 1
        _GUICtrlListBox_AddString($idList, $aDisplay[$i])
    Next
    _GUICtrlListBox_EndUpdate($idList)

    GUICtrlSetState($idList, $GUI_ENABLE)
    GUICtrlSetState($idList, $GUI_FOCUS)
    _GUICtrlListBox_SetCurSel($idList, 0)
EndFunc

; 直接从显示出来的列表中提取,保证与排序一致
Func CopyAllFromList()
    Local $iCnt = _GUICtrlListBox_GetCount($idList)
    If $iCnt <= 0 Then Return

    Local $sAll = ""
    For $i = 0 To $iCnt - 1
        $sAll &= _GUICtrlListBox_GetText($idList, $i) & @CRLF
    Next
    ClipPut(StringTrimRight($sAll, 2))
EndFunc

附录 D:Android 版本下载

本程序同时还提供开源的 Android 手机版,同样也由信息无障碍专家张赐荣先生开发,完全符合无障碍标准规范,可在 github.com/CingZeoi/RandomNumberGeneratorApp 获取。

相关推荐
dyxal1 天前
内网 Windows 离线安装 uv:极速 Python 包管理器的部署实战
windows·python·uv
stone08231 天前
如何解决Windows硬盘变成了空白
windows
零号全栈寒江独钓1 天前
基于c/c++实现linux/windows跨平台ntp时间戳服务器
linux·c语言·c++·windows
舒一笑1 天前
Windows 下执行 pnpm install 报 EBUSY: resource busy or locked,我最后用这一招解决了
前端·windows·程序员
hERS EOUS1 天前
Redis 下载与安装 教程 windows版
数据库·windows·redis
爱吃香蕉的阿豪1 天前
Mac 远程操作 Windows 开发:ZeroTier + JetBrains 实战指南
windows·macos·zerotoer
YJlio1 天前
2026年4月18日60秒读懂世界:从神舟二十号出舱到L2新国标公示,今天最值得关注的6个信号
windows·python·django·计算机外设·电脑·outlook·eixv3
代码小书生2 天前
Windows X-Lite Win11 26H1 v3 游戏优化系统!集Win11、Win10、Win7三代优点,兼顾游戏办公生产算力,系统精简纯净!
windows·win10·电脑系统·windows10·26h1·windows x-lite·操作系统操作系统
贵沫末2 天前
python——打包自己的库并安装
开发语言·windows·python
小眼哥2 天前
SpringBoot整合Vue代码生成exe运行程序以及windows安装包
vue.js·windows·spring boot