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

关于软件

  • 软件名称: 随机数生成器 (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 获取。

相关推荐
Byron Loong13 小时前
【调试】Dump 文件分析的完整流程
windows
Geoking.15 小时前
VSCode 安装 Claude Code 插件 + ccswitch 配置 DeepSeek API 完整教程(Windows 新手向)
ide·windows·vscode
潘达斯奈基~16 小时前
Windows 下 Claude Code使用 Agent Teams 配置教程
windows
happymaker062618 小时前
Spring框架学习日记——DAY02(依赖注入的方式)
windows
honder试试19 小时前
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
windows·elasticsearch·jenkins
IT里的交易员20 小时前
【系统】Windows 安装 uv
windows·uv
我不是立达刘宁宇21 小时前
windows密码操作
windows
Royzst1 天前
一、集合概述(前置基础)
开发语言·windows·python
时光追逐者1 天前
一款基于 C# 开发的 Windows 10/11 系统增强工具,精简、优化、定制一站完成!
开发语言·windows·c#·.net
liuhuizuikeai1 天前
菜品抽奖活动MFC+服务端
c++·windows·mfc