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消息、或者改善的办法、求指教、谢谢、
注:按键精灵可以实现操作、

游戏的键盘输入采用的是DirectInput,和GDI的键盘原理是不一样的,所以不能用sendkey之类的三层GDI API。

要解决这个问题,必须是直接采用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的按键

delphi中有模拟发送鼠标按键sendmessage的疑问

Delphi模拟win+tab按键效果

delphi中如何模拟最简单的键盘输入?

【delphi】关于窗口接收键盘按键的问题,求指导~

delphi 模拟键盘法对当前窗口鼠标左键单击最小化怎么做?