中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: HELLO, 我是香港來的, 上一主题 | 下一主题
woodycys
新手上路





积分 7
发帖 3
注册 2010-5-11
状态 离线
『楼 主』:  HELLO, 我是香港來的, [已使用 LLM 解释]

HELLO, 我是香港來的,
我的工作十分苦悶, 是在DOS模式下有一系統裡(不是WINDOWS)
不停地按鍵盤的上上下下輸入公司的名字和按下ENTER

想問一下, 在WINDOWS我知道有一些機械人程式可以幫我完成重覆性動作
但請問一下, 在DOS下, 能否一邊運作公司的DOS系統軟件, 一邊自製一個機械人程式幫我自動按下我每天按上千次的鍵??謝謝~!
LLM 解释

在 1980 年代至 2000 年代初期的 DOS 环境中,实现自动化按键操作是一项成熟的技术,通常被称为“键盘宏”(Keyboard Macro)或“按键脚本”。针对原贴中提到的在 DOS 业务系统运行的同时模拟按键需求,其核心技术实现与环境限制如下:

1. 技术核心:TSR(终止并驻留)程序

在单任务的 DOS 环境下,要让一个自动化程序与业务系统同时运行,该自动化程序必须以 TSR(Terminate and Stay Resident)模式存在。其工作原理通常是拦截 INT 09H(硬件键盘中断)或 INT 16H( BIOS 键盘服务中断)。

  • INT 16H 拦截法:这是最常见的实现方式。自动化程序通过挂钩(Hook)INT 16H,当业务系统调用该中断尝试从键盘缓冲区读取字符时,TSR 程序不等待物理按键,而是直接将预设的扫描码(Scan Code)或 ASCII 码填入返回寄存器。
  • 键盘缓冲区注入法:DOS 系统在内存低位(0040:001A 至 0040:001D)维护一个循环队列作为键盘缓冲区。TSR 程序可以定时(利用 INT 08H 定时器中断)检查缓冲区状态,并在必要时直接改写缓冲区内存,实现“自动打字”的效果。

2. 历史上的解决方案与工具

在 2010 年该贴讨论时,虽然 Windows 平台已有“按键精灵”等成熟软件,但纯 DOS 下主要依赖以下几类工具:

  • 专用宏工具:如 SuperKeyProKeyKeyWorks。这些是 1980-90 年代流行的商业或共享软件,允许用户录制按键序列并分配给特定的热键触发,支持循环执行和简单的延时。
  • 批处理增强工具:一些扩展工具如 STACKERSENDKEYS(非 Windows 版),可以在启动业务系统前将特定按键压入键盘堆栈,但通常只能处理启动初期的输入,难以处理复杂的逻辑循环。
  • 自定义 C/汇编程序:对于特定业务流程(如原贴提到的“上下移动+回车”),当年的开发者通常会编写简单的 C 或汇编程序,挂载 INT 08H 计数,达到特定间隔后向 INT 16H 注入按键。

3. 技术限制与兼容性风险

尽管技术上可行,但在实际的 DOS 生产环境中存在以下限制:

  • 直接访问硬件冲突:如果业务系统为了追求性能,跳过了 BIOS 中断(INT 16H)直接通过 I/O 端口(60H/64H)读取键盘控制器的原始数据,那么基于中断拦截的 TSR 脚本将完全失效。
  • 内存空间限制(640KB):TSR 程序会占用常规内存。如果业务系统本身很大,加载自动化工具可能导致内存不足(Out of Memory)或系统挂起。
  • 时序同步问题:DOS 是非抢占式环境。如果自动化程序发送按键的速度快于业务系统的处理速度(例如数据库查询未完成时即按下 Enter),会导致输入错乱或缓冲区溢出。

4. 现代模拟环境下的替代方案

若该 DOS 系统运行在虚拟机(如 VMware, VirtualBox)或模拟器(如 DOSBox)中,通常不再需要在 DOS 内部编写 TSR。

  • DOSBox:可以通过外部脚本工具(如 AutoHotkey)直接向 DOSBox 窗口发送指令。
  • 虚拟化平台:利用宿主机的自动化 API(如 Python 的 pyautogui)可以跨越操作系统边界实现按键注入,这比在 DOS 内部实现驻留程序更稳定且易于调试。

总结而言,原贴讨论的需求在 DOS 时代是通过 TSR 挂钩 INT 16H 来实现的。在现今维护旧系统时,建议优先考虑在宿主环境进行自动化模拟,而非编写底层的 DOS 驻留代码。



2010-5-15 11:12
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
jawbin
高级用户




积分 994
发帖 444
注册 2005-1-29
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

估计你说的是命令行吧。

好像有所谓按键精灵之类的可以,不过可能设置比较复杂。


2010-5-20 20:21
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
stockghost
中级用户





积分 215
发帖 105
注册 2007-6-2
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

是在纯DOS下还是在Windows的DOS窗口?

两者应该都可以.

纯DOS下做一驻留程序自动帮你做完重复的输入工作.

Last edited by stockghost on 2010-5-20 at 20:31 ]


2010-5-20 20:24
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
070
高级用户

苏醒的沉睡者


积分 659
发帖 217
注册 2003-2-15
来自 福建
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

dos底下可以考虑写一个TSR来实现你的要求
windows里可以考虑采用 按键精灵 呀




好久没碰Dos,手都生了,赶紧回来练练.嘿嘿
2010-5-21 19:45
查看资料  发送邮件  发短消息  网志  OICQ (181315400)  编辑帖子  回复  引用回复
ecurb2006
中级用户

www.ecgui.com



积分 272
发帖 123
注册 2006-9-23
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

呵呵,让我想起了 美剧 《迷失》里的那串数字~每次都得人工输入~
关于解决办法,楼上正解。




eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
2010-5-24 00:55
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: