纯DOS环境模拟键盘操作

developing_T 2006-08-15 09:15:53
可不可以在硬件的基础上模拟键盘操作,即不管在什么系统下都可以执行,而不是在windows下调用API模拟键盘操作,比如:纯DOS环境,模拟按键消息,在DOS下自动输入“TEST 回车” 等
如果是WINDOWS下面可以发送个消息,很简单就实现了,如何在DOS下面实现,请各位大侠帮忙!
...全文
571 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
developing_T 2006-08-16
  • 打赏
  • 举报
回复
我把上面的代码保存到 out.asm 中
然后下载 masm5
在CMD中执行: masm out.asm
然后所有的默认回车,一直到结束,产生一个out.exe
执行后没有反应,请问哪里做错了,谢谢指教。
developing_T 2006-08-16
  • 打赏
  • 举报
回复
不好意思,这个我编译不出来,谁能大概讲一下,呵呵
developing_T 2006-08-16
  • 打赏
  • 举报
回复
太谢谢了,zara(Kyrie eleison) 可以认识一下吗,我的MSN:wangyang_hatl@hotmail.com
zara 2006-08-16
  • 打赏
  • 举报
回复
这个要求, 可能实现起来有些复杂的. 对文本文件的修改, 可能还是直接进行文件操作更方便些. 我的 QQ: 25484385 (zara), 刚才加了你, 好像没有在线吧
developing_T 2006-08-16
  • 打赏
  • 举报
回复
那有QQ吗,21186650
编译成功了,不过还有个新问题,我想打开一个文本,然后执行这个程序,让键盘自己往文本里输入内容,可是怎么也实现不了。
zara 2006-08-16
  • 打赏
  • 举报
回复
上面的代码应该做成 .com 格式的, 程序开始的 .model tiny 语句说明了的. 如果用的是 Masm5 的话, 需要再通过 exe2bin.exe 程序将生产的 .exe 文件转换为 .com; 如果使用 Masm6 的话, 直接 ml out.asm 就可以了.
另外, 很抱歉, 我几乎不用 MSN 的.
zara 2006-08-15
  • 打赏
  • 举报
回复
; 下面的程序向键盘缓冲区填入 'Dir<CR>', 这样运行后会执行 Dir 的dos 命令
.model tiny

_TEXT segment 'CODE'

assume cs:_TEXT, ds:_TEXT

org 100h

start::
mov si, offset keys
mov cx, count
call WriteKey

mov ax, 4c00h
int 21h

keys db 'D', 20h, 'i', 17h, 'r', 13h, 0dh, 1ch ; 'Dir' 命令, 字符和扫描码成对
count = ($ - keys) / 2

WriteKey proc

pushf
push si
push cx
push ax

cld
jcxz l_popret
mov bx, cx
l_key1:
lodsw
mov cx, ax
mov ah, 5
int 16h
jc l_popret ; 出错, 键盘缓冲区以满, 退出返回
dec bx
jnz l_key1
l_popret:
pop ax
pop cx
pop si
popf

ret

WriteKey endp

_TEXT ends

end start
developing_T 2006-08-15
  • 打赏
  • 举报
回复
谢谢楼上的,就是你说的方法,现在是我不太懂汇编,中断什么的,有Demo的程序给我们看看吗,谢谢
zara 2006-08-15
  • 打赏
  • 举报
回复
可以试试 int16h 中断的 05h 功能:

Interrupt: 16h Function: 05h

Title: Push Character and Scan Code

Description: [AT] [PS/2]

Places a character and scan code in the keyboard type-ahead
buffer. This function can be used by keyboard enhancers and other
utilities to interpolate keys into the data stream seen by
application programs.

Input Output

AH = 05h If function successful
CH = Scan code Carry flag: clear
CL = Character AL = 00h

If function unsuccessful
(type-ahead buffer is full)
Carry flag: set
AL = 01h

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧