社区
汇编语言
帖子详情
DOS下怎么自动模拟键盘输入?
skybluemoon
2003-09-29 08:01:03
如题,多谢
...全文
591
2
打赏
收藏
DOS下怎么自动模拟键盘输入?
如题,多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sober1982
2003-09-30
打赏
举报
回复
好厉害呀!!!
紫郢剑侠
2003-09-29
打赏
举报
回复
往键盘缓冲区里填呀.
我喜欢在DOS下用QE.EXE来阅读文本文件,自已按键手痛。于是写了个自动向键盘缓冲区放UP和
DOWN键值的TSR程序。用低版本MASM汇编, COM格式。
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 文件名: AutoKey.asm
; 功 能: 自动向键盘缓冲区填充RIGHT 或 DOWN 键值 来移动光标
; Ctrl + Tab 停止填充
; Ctrl + RIGHT 填充RIGHT 键值
; Ctrl + DOWN 填充DOWN 键值
; Ctrl + UP 提高填充速度
; Ctrl + LEFT 降低填充速度
;
; 作 者: 黄志斌 2003年2月 广西河池
;
; 申 明: 可以自由转载,应保存完整性.且不能用于商业用途
;
; 说 明:
; 1. 第一次运行时常驻内存,再次运行则撤出内存
; 2. 适用于QE.EXE 和 TC.EXE, 不适于 EDIT.COM
; 3. 改进方向:
; A 在屏幕右上角显示当前速度
; B 填充RIGHT 键值时能自动换行
; 开发环境: IBM PC 486, MSDOS7.0(mswin95), MASM生成
; Log
; -----------------------------------------------------------------------
; 2003.02.24 Created, but the result is exception!
; 2003.02.25 OK!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<
cseg segment
;==============================
org 100h
assume es: cseg, ss: cseg
assume cs: cseg, ds: cseg
UP EQU 48h
Left EQU 4bh
RIGHT EQU 4dh
DOWN EQU 50h
Ctrl EQU 04h
Alt EQU 08h
EndKey EQU 4fh
Tab EQU 0Fh
AddKey EQU 0dh
DecKey EQU 0ch
RightDelay equ 10
DownDelay equ 100
;-----------------------------
start: jmp @Init
;====================
Old1cAddr label dword
Old1cOff dw ?
Old1cSeg dw ?
Old09Addr label dword
Old09Off dw ?
Old09Seg dw ?
mcb_evb dw ? ; mcb: Memmory Control Block
mcb_psp dw ?
show dw 1
count dw 0
FillKey db 0
time dw 0
AutoKey label word
db 00
KeyCode db RIGHT
VarLen equ $ - Old1cAddr
;---------------
new09h proc far
sti
push ax
push bx
push ds
mov ax, 0040h
mov ds, ax
mov bh, ds:[017h]
push cs
pop ds
test bh, Ctrl
jz @old09
in al, 60h
cmp al, Tab ;EndKey
jne @right
mov FillKey, 0
mov KeyCode, 0
jmp @Old09
@right:
cmp al, RIGHT
jnz @down
mov byte ptr KeyCode, RIGHT
mov time, RightDelay
jmp @AutoON
@down:
cmp al, DOWN
jnz @up
mov byte ptr KeyCode, DOWN
mov time, DownDelay
jmp @AutoON
@up:
cmp al, UP
jnz @left
cmp word ptr time, 1
je @Old09
dec time
jmp @ClrCount ;jmp @Old09
@left:
cmp al, LEFT
jnz @Old09
cmp word ptr time, 0ffffh
je @Old09
inc time
;jmp @ClrCount
@AutoON:
mov FillKey, 1
@ClrCount:
mov count, 0
@Old09:
pop ds
pop bx
pop ax
jmp cs:Old09Addr
new09h endp
new1ch proc far
cmp byte ptr cs:FillKey, 1
jne @Old1c
push ds
push cs
pop ds
inc count
mov ax, time
cmp ax, count
jne n1c
mov count, 0
push ax
push bx
mov ax, 0040h
mov ds, ax
cli
mov bx, word ptr ds:[001ch]
mov ax, cs: AutoKey
mov [bx], ax
inc bx
inc bx
cmp bx, 003eh
jnz @NoTail
mov bx, 001eh
@NoTail:
mov ax, bx
mov bx, 001ch
mov [bx], ax
sti
pop bx
pop ax
n1c:
pop ds
@Old1c:
jmp cs:Old1cAddr
new1ch endp
@Init:
mov ax, 3509h ; Get current 1ch interrupt vector
int 21h
cmp bx, offset new09h ; Has been Intalled?
jnz @install ; No install
mov dx, offset strMsgUninstall
mov ah, 09h
int 21h
mov bx, 1ch * 04h ; Restore old 1ch interrupt vector
xor ax, ax ; to System interrupt vector talbe
mov ds, ax
mov ax, es:[Old1cOff]
mov ds:[bx], ax
mov ax, es:[Old1cSeg]
mov ds:[bx+2], ax
mov bx, 09h * 04h ; Restore old 09h interrupt vector
mov ax, es:[Old09Off] ; to System interrupt vector talbe
;xor ax, ax
;mov ds, ax ; ds must equal 0
mov ds:[bx], ax
mov ax, es:[Old09Seg]
mov ds:[bx+2], ax
mov bx, 1 ; Release evirenment parameter block
mov ax, es:[mcb_evb]
mov ds, ax
mov word ptr ds:[bx], 0
mov ax, es:[mcb_psp] ; Release TSR
mov ds, ax
mov word ptr ds:[bx], 0
mov ax, 4c00h
int 21h
@install:
;mov ax, 3509h ; Get current 1ch interrupt vector
;int 21h
mov Old09Seg, es ; Store current 09h interrupt vector
mov Old09Off, bx
mov dx, offset new09h ; Set new 09h interrupt vector
mov ax, 2509h
int 21h
mov ax, 351ch ; Get current 1ch interrupt vector
int 21h
mov Old1cSeg, es ; Store current 1ch interrupt vector
mov Old1cOff, bx
mov dx, offset new1ch ; Set new 1ch interrupt vector
mov ax, 251ch
int 21h
mov dx, offset strMsgInstall
mov ah, 09h
int 21h
; Store the address of evirenment parameter block
mov ax, cs
dec ax
mov [mcb_psp], ax ;mov cs:[mcb_psp], ax
mov bx, 2ch
mov ax, [bx] ;mov ax, cs:[bx]
dec ax
mov cs:[mcb_evb], ax
mov dx, offset @Init
add dx, VarLen + 2
mov cl, 04h
shr dx, cl
mov ax, 3100h
int 21h
;====================
strMsgInstall db 07h, "AutoKey installed!$"
strMsgUninstall db 07h, "AutoKey uninstalled!$"
cseg ends
end start
你必须知道的495个C语言问题
我在设计一个状态机,用函数表示每种状态,每个函数都会返回一个指向下一个状态的函数的指针。可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此...
200个经典C程序【源码】
011
模拟
ATM(
自动
柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的...
入门学习Linux常用必会60个命令实例详解doc/txt
这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。每个虚拟控制台可以看作是一个独立的工作站,工作台...
模拟
键盘按键
自动
输入文字
<br />
模拟
键盘按键
自动
输入文字 键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;...
vc+如何实现
模拟
键盘输入
,
自动
输入文字
其中,WM_KEYDOWN为键按下,WM_KEYUP为键弹起,WM_SYSKEYDOWN为系统键...在不同的操作系统下,键盘扫描码常常被转换为不同的编码以方便应用程序调用,比如在Windows系统下的ASCII码,在Windows系统下的虚拟键盘码等等。
汇编语言
21,459
社区成员
41,602
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章