当前位置:编程学习 > Delphi >>

delphi 模拟按键问题

赛车游戏挂机自动按键(xp系统)、 keybd_event、SendInput、被屏蔽、均无法对正在游戏按键(聊天时输入框却可以实现按键)、 改用winio模拟、没开游戏时用记事本测试正常、一旦运行游戏就会出现‘特权指令’(privileged instruction)异常、 { asm PUSH EAX PUSH EDX @Loop: IN AL,$64//词句问题 AND AL,01b JNZ @Loop MOV AL,Cod MOV DL,Por MOV DH,0 OUT DX,AL POP EDX POP EAX end; } (查到有人这么说:out和in汇编指令在Window2000以上Ring3(普通级别)不能再使用,如果要使用,必须进入Ring0指令级别(操作系统级),驱动程序工作在Ring0级别下.) 不明白其意思、 有什么其他方法、绕过Windows消息、或者改善的办法、求指教、谢谢、 注:按键精灵可以实现操作、
追问:谢了。那请问按键精灵是怎么实现的呢?
答案:游戏的键盘输入采用的是DirectInput,和GDI的键盘原理是不一样的,所以不能用sendkey之类的三层GDI API。

要解决这个问题,必须是直接采用IO拦截。但是IO拦截不能在Ring3下使用,必须是Ring0,也就是必须写驱动(.sys)来拦截。

或者采用提权手法把自己的Ring3程序提权到Ring0,但是这种方法一般正规程序都不会用,会被系统、杀毒软件等拦截。

所以唯一的办法就是写驱动。
其他:出现“Privileged   instruction   错误”的错误情况一般是: 
在释放某对象之前就释放了它的Owner。 
仔细检查你的代码看看有没有上述情况。 mouse_event直接就可以模拟鼠标点击啊,这个是整个系统有效的。模拟点击不需要用钩子啊,你又不需要截获鼠标消息 sendmesage();
 

上一个:delphi数据库编程,ADO+SQL,高手进!
下一个:Delphi二维表不显示数据库内容!!!

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,