社区
汇编语言
帖子详情
谁能给一份dos键盘驻留程序的源代码,谢谢
AthlonxpX86
2003-09-01 11:47:36
找了很多这种源代码,但都不能用,想不通啊,只要能实现比如Y变成y就行了.
...全文
26
7
打赏
收藏
谁能给一份dos键盘驻留程序的源代码,谢谢
找了很多这种源代码,但都不能用,想不通啊,只要能实现比如Y变成y就行了.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
紫郢剑侠
2003-09-02
打赏
举报
回复
我有现成的原代码.功能与所要求的差不多.
我找找看.
先贴个dos键盘驻留程序参考一下.
我喜欢在DOS下用QE.EXE来阅读文本文件,自已按键手痛。于是写了个自动向键盘缓冲区放UP和
DOWN键值的程序。
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 文件名: 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
W32API
2003-09-02
打赏
举报
回复
很久没写这些东东了。。。
我想你还是替换那个获取一个键盘输入的中断比较好(该是 16H 吧)
在返回按键值的时候将 Y 转换为 y 即可
AthlonxpX86
2003-09-02
打赏
举报
回复
唉,没有用很正常啊,人家的程序也可以自己扫描键盘啊。
这样是跟你的软件就没有关系了的。
替换中断的方法只能成功在使用简单的方式的获取数据的程序上。
/////////////////////////////////////////////
人家的程序能够扫描键盘,一样我的程序也要扫描键盘这样就能获得任何从键盘来的数据,因此我需要用int9,只要键盘有任何动作都会触发这个中断,而int16不一样,这应该是软件调用的中断,因此软件中甚至可以不用int16,但是键盘输入肯定会用到int9的,在我的int9中断服务程序中调用in16来获得缓冲区键盘扫描码,但是会出错,所以我想找类似的程序来试试, 我想SoRoMan的程序就是因为修改的是int16而非int9所以不能成功
W32API
2003-09-02
打赏
举报
回复
唉,没有用很正常啊,人家的程序也可以自己扫描键盘啊。
这样是跟你的软件就没有关系了的。
替换中断的方法只能成功在使用简单的方式的获取数据的程序上。
AthlonxpX86
2003-09-02
打赏
举报
回复
to W32API: int16好像很多程序都没有用到这个,所以我做了int9的中断服务,但是不知道怎样能获得我需要的键盘扫描码,我用int16 Ah=1获得,但是好像不对啊,而且运行一段时间后会出错,实在搞不懂
to Purpleendurer:谢谢,我好好研究研究,呵呵
to SoRoMan你贴的代码我看过,是CSDN上的文章吧,确实想实现这种功能,但是这个代码有问题,不能实现Y变成y
希望高手多多帮忙
spbabyba
2003-09-02
打赏
举报
回复
http://www.x86asm.com
SoRoMan
2003-09-02
打赏
举报
回复
昨天看到:
cseg segment
assume cs:cseg,ds:cseg
org 100h
start:
jmp Initialize
Old_Keyboard_IO dd ?
new_keyboard_io proc far
assume cs:cseg,ds:cseg
sti
cmp ah,0
je ki0
assume ds:nothing
jmp Old_Keyboard_IO
ki0:
pushf
assume ds:nothing
call Old_Keyboard_IO
cmp al,'y'
jne ki1
mov al,'y'
jmp kidone
ki1:
cmp al,'Y'
jne kidone
mov al,'y'
kidone:
iret
new_keyboard_io endp
Initialize:
assume cs:cseg,ds:cseg
mov bx,cs
mov ds,bx
mov al,16h
mov ah,35h
int 21h
mov word ptr Old_Keyboard_IO,bx
mov word ptr Old_Keyboard_IO[2],es
mov dx,offset new_keyboard_io
mov al,16h
mov ah,25h
int 21h
mov dx,offset Initialize
int 27h
cseg ends
end start
DOS
命令图解教程
DOS
命令图解教程
DOS
概述及入门 ——
DOS
简介 现在家用电脑的操作系统大多都是用的 Windows 95,但在1995年Windows 95推出以前,占统治地位的操作系统是
DOS
(Disk Operation System 磁盘操作系统)。 接触电脑早一点的人想必都听说过
DOS
的大名,更有很多人到今天仍然对
DOS
时代怀念不已,虽然自己的电脑早已用上了Windows 95,但仍要在硬盘上保留
一份
DOS
,以备不时之需。 那么
DOS
的魅
DOS
操作系统
DOS
是英文Disk Operating System的缩写,意思是“磁盘操作系统”,顾名思义
DOS
主要是一种面向磁盘的系统软件。说得简单些,
DOS
就是人与机器的一座桥梁,是罩在机器硬件外面的一层“外壳”,有了
DOS
,就不必去深入了解机器的硬件结构,也不必去死记硬背那些枯燥的机器指令。只需通过一些接近于自然语言的
DOS
命令,就可以轻松地完成绝大多数的日常操作。此外,
DOS
还能有效地管理各种软硬件资源,对它们进行合理的调度,所有的软件和硬件都在
DOS
的监控和管理之下,有条不紊。
DOS
命令大全二
DOS
在WINDOWS下的优势 大家现在已能熟练地操作WINDOWS了,初学者根本不知道“
DOS
”是何物?但是一旦系统崩溃,又要回到“原始社会”--
DOS
。 其实在
DOS
下的一些命令是WINDOWS下无可比拟的(太夸张了些^-^)。首先介绍几个
DOS
下的命令: 一、delete(DEL)。大家一定要说这不是删除命令吗?对!就是删除命令。它能删除在WINDOWS下无法删
DOS
命令大全(转)
dos
命令大全 CMD是command的缩写,是windows环境下的虚拟
DOS
窗口,提供有
DOS
命令,功能强大,如果你以前学习过
DOS
操作,那就小儿科了。是基于Windows的命令行窗口,在开始——运行中键入,确定,就能看到了!运行CMD以后,会打开一个仿
DOS
窗口,你可以在这个窗口中输入各种
DOS
命令.CHKDSK是一个磁盘检查
程序
,当XP系统非法关机后再次启动时,系统会自动运行CHKD...
dos
命令大全
CMD是command的缩写,是windows环境下的虚拟
DOS
窗口,提供有
DOS
命令,功能强大,如果你以前学习过
DOS
操作,那就小儿科了。是基于Windows的命令行窗口,在开始——运行中键入,确定,就能看到了!运行CMD以后,会打开一个仿
DOS
窗口,你可以在这个窗口中输入各种
DOS
命令.CHKDSK是一个磁盘检查
程序
,当XP系统非法关机后再次启动时,系统会自动运行CHKDSK检查磁盘...
汇编语言
21,458
社区成员
41,603
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章