delphi 模拟按键问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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消息、或者改善的办法、求指教、谢谢、
注:按键精灵可以实现操作、
要解决这个问题,必须是直接采用IO拦截。但是IO拦截不能在Ring3下使用,必须是Ring0,也就是必须写驱动(.sys)来拦截。
或者采用提权手法把自己的Ring3程序提权到Ring0,但是这种方法一般正规程序都不会用,会被系统、杀毒软件等拦截。
所以唯一的办法就是写驱动。 参考技术A 游戏的键盘输入采用的是DirectInput,和GDI的键盘原理是不一样的,所以不能用sendkey之类的三层GDI API。
要解决这个问题,必须是直接采用IO拦截。但是IO拦截不能在Ring3下使用,必须是Ring0,也就是必须写驱动(.sys)来拦截。
或者采用提权手法把自己的Ring3程序提权到Ring0,但是这种方法一般正规程序都不会用,会被系统、杀毒软件等拦截。
所以唯一的办法就是写驱动。追问
谢了。那请问按键精灵是怎么实现的呢?
追答没用过,不知道
本回答被提问者采纳 参考技术B 出现“Privileged instruction 错误”的错误情况一般是:在释放某对象之前就释放了它的Owner。
仔细检查你的代码看看有没有上述情况。 参考技术C mouse_event直接就可以模拟鼠标点击啊,这个是整个系统有效的。模拟点击不需要用钩子啊,你又不需要截获鼠标消息 sendmesage();
模拟按键控制游戏Python问题,怎么解决
用第三方Python库:PyUserInput 可以模拟鼠标、键盘输入! 参考技术A 你可以研究下pywinauto模块以上是关于delphi 模拟按键问题的主要内容,如果未能解决你的问题,请参考以下文章
Delphi中如何实现模拟组合按键,如发送Ctrl+F的按键