关于软件
- 软件名称: 随机数生成器 (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.exe"。
四、 使用指南
4.1 基本操作流程
4.1.1 生成随机数
-
设置参数:
- 在"最小值"输入框中设定随机数的下限(默认:1)
- 在"最大值"输入框中设定随机数的上限(默认:100)
- 在"数量"输入框中设定需要生成的随机数个数(默认:10)
-
选择唯一性:
- 如需生成不重复的随机数,勾选"唯一"复选框
- 若要允许重复值,保持取消勾选状态即可
-
执行生成动作:
- 点击"生成"按钮或按 Alt+G 快捷键
- 生成的随机数将立即显示在下方的结果列表框中
-
查看结果:
- 程序自动聚焦到结果列表
- 第一个数字自动被选中
- 使用上下方向键浏览所有生成的数字
4.1.2 复制数据
-
复制单个数字:
- 在结果列表中选中目标数字
- 右键点击列表框
- 选择"复制当前"或按字母 "C"
- 数字已复制到剪贴板,可粘贴到任意应用
-
复制全部数字:
- 右键点击结果列表框
- 选择"复制全部"或按字母 "A"
- 所有数字以换行分隔格式复制到剪贴板
4.1.3 切换排序方式
- 右键点击结果列表框
- 将鼠标悬停在"排序方式"子菜单上
- 选择所需的排序模式:
- 升序(A):从小到大排列
- 降序(D):从大到小排列
- 乱序(R):随机打乱排序
- 菜单项前的勾选标记指示当前激活的排序模式
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 无障碍相关故障排除
问题:屏幕阅读器无法朗读控件
解决方案:
- 确保屏幕阅读器已启动并处于交互模式
- 尝试使用 Tab 键重新导航到控件
问题:快捷键无响应
解决方案:
- 确认程序窗口处于聚焦活动状态(点击窗口标题栏)
- 检查是否与其他软件的快捷键冲突
问题:焦点未按预期跳转
解决方案:
- 使用 Tab 键手动导航到目标控件
- 关闭并重新打开程序
- 重启屏幕阅读器软件
六、 技术规格
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 获取。