汇编:模拟键盘按键的小程序,有点问题

_SetKeyproc@S;参数@S==键盘扫描码;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>... _SetKey proc @S
;参数@S == 键盘扫描码
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0
@loop1:
in al,64h
and al,010b
jnz @loop1

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;向64端口写命令,模拟键按下
mov al, 0D2h ;写键盘输出缓存命令
out 64h, al

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0
@Loop2:
in al, 64h
and al, 10b
jnz @Loop2

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;向$60端口写参数,模拟键松开
mov eax, @S
out 60h, al

ret
_SetKey endp

这个子程序没反应,不知道哪里错了
当然这个是在有操作权限的前提下调用的
如果改成直接从60h端口写入数据0ffH(重置键盘),键盘灯有反复。

不要嫌我分少,我没分了
windows xp
我是在定时器消息里调用的
展开
 我来答
gww1bd
2010-07-23 · TA获得超过303个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:0
展开全部
void KeyPress(BYTE code)
{
_asm
{
LOOP1:
in al, 0x64 ;//读端口状态
and al, 10b ;//检测OBF状态位
jnz LOOP1 ;//缓冲区满时继续等待
mov al, 0xD2 ;//写键盘缓冲命令
out 0x64, al ;//向0x60端口发送命令
LOOP2:
in al, 0x64 ;//读端口状态
and al, 10b ;//检测OBF状态位
jnz LOOP2 ;//缓冲区满时继续等待
mov al, code ;//命令参数即扫描码
out 0x60, al ;//向0x60端口写命令参数
}
}

以前写的能用。
如果你是在写游戏外挂,可能是IO权限又被反外挂程序改回去了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式