关于鼠标、键盘模拟的问题?估计超难(200分)

  • 主题发起人 主题发起人 long034
  • 开始时间 开始时间
L

long034

Unregistered / Unconfirmed
GUEST, unregistred user!
在编写程序的过程中,一般我用到模拟鼠标键盘的问题一般采用的是SendMessage 、PostMessage 或者 keydb_event 、mouse_event 函数进行模拟,但现在我在模拟键盘、鼠标的时候出现了一些问题,我在写一个小程序,用来控制游戏中的人物和模拟一些按键操作,功能也很简单(就有点像按键精灵的功能,但按键精灵运行起来机子实在慢得不行),可很奇怪似乎所以的Windows消息都被屏蔽了,调用上面的哪一个函数,在游戏中都不起作用,因此我想消息被屏蔽,是否可以采用一种底层的硬件的方式进行模拟,而不依赖Windows的消息,由于我底层知识了解很少、对底层硬件的编程,包括汇编等语言不是很熟,虽查阅了一些资料但还是不能如愿,在此向各位高手求教,望帮我指点迷津。在此先行谢过!!
 
我这样猜想:不应该屏蔽了所有的消息,不然不利用Windows的消息机制游戏编的可够累。到是有可能屏蔽某一途径的消息(游戏中有一定的识别方式),或着是你没有正确获取发送消息的目标句柄。按键精灵是否有效?
帮你顶一下。
 
用Hook应该可以解决
 
听起来你似乎在做一个游戏的外挂,hoho
你要模拟的操作也就是一系列的键盘鼠标消息对吧;
用挂钩(Hook)是可以实现的,简单点的办法,你可以先把你想模拟的操作 在键盘鼠标上操作一次,用一个挂钩程序记录下来到一个EVENTMSG的数组,然后就可以使用挂钩建立回放消息的记录链来重复这些操作;当然,这样的方法就没有遇到突发时间作出判断的能力
 
二楼的意见很对,确实不是所有的消息都被屏蔽,我曾试过向程序发送一个字符,确实在游戏中能够显示出来,但是如果发送对于键盘和鼠标控制的消息似乎就被屏蔽了,模拟任何一点鼠标的点击,或键盘的按下都不起作用,应该是有判断的把鼠标、键盘控制有关的消息都屏蔽了。
三楼的能不能给一个示例看看,万分感谢!
 
最后一句打错字了,是突发事件, 不好意思
 
如果需要的话,可以给你一个 记录鼠标键盘消息 和回放的 例子,不过要等等,现在有点忙
 
喔,四楼说的方法我知道,可这样的回放和操作方式的灵活性不行,对某些地方的控制很难控制,因为总要有一些突发的事件要处理,而且人物在不同的环境中需要做出的反映是不一样的,而且也有点偏离了我的问题。我只想知道,如何在硬件的层面来模拟鼠标和键盘的控制,而不依赖于Windows的消息机制,这样就可以避开游戏对消息的限制。
 
如何在硬件的层面来模拟鼠标和键盘的控制
这个貌似有点难度,应该要知道windows底层是怎么接收这个消息的吧,反正偶是不懂的了,帮你顶顶
 
谢谢themars ,我想问下,用汇编指令能够从硬件的层面模拟吗?如果问题不妥,请不要见笑。
 
能我想应该是没问题的吧, 但是要对windows底层了解到什么程度才能做到,我就不知道了~(:
 
如果你想从最底层,还可以有一种方式,应该是通用的。就是你自己使用硬件模拟键盘输出信息,插键盘端口上,这样不管什么软件都会可以的。
 
LZ,想了下,觉得你的思路可能未必可取,你想避开windows消息机制去模拟鼠标键盘消息,而模拟的目的是为了控制游戏的操作,还需要对突发事件进行判断,但是这些游戏里的突发事件都是基于windows消息的,你最后还是免不了要回到windows消息机制上面来
 
LZ,想了下,觉得你的思路可能未必可取,你想避开windows消息机制去模拟鼠标键盘消息,而模拟的目的是为了控制游戏的操作,还需要对突发事件进行判断,但是这些游戏里的突发事件都是基于windows消息的,你最后还是免不了要回到windows消息机制上面来
 
不能用API了 现在只能模拟硬件了。
用WINIO.DLL中断控制来模拟吧。
 
今天我在查找相关资料的时候,发现一个东西,就是关于DirectInput的,可以避开API进行键盘和鼠标操作,我对DirectInput不是很熟悉,而且在网上的资料基本都是基于C的,有熟悉的朋友能不能给个delphi的简单讲解,十分感谢!!
 
后退
顶部