3个回答
2020-06-26
展开全部
有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的要求比较高,比如赛车游戏,要求以最快速度响应键盘输入。而windows消息由于是队列形式的,消息在传递时会有不少延迟,有时1秒钟也就传递十几条消息,这个速度达不到游戏的要求。而DirectInput则绕过了windows消息,直接与键盘驱动程序打交道,效率当然提高了不少。因此也就造成,对这样的程序无论用PostMessage或者是keybd_event都不会有反应,因为这些函数都在较高层。
这个时候就要用到驱动级模拟。可以到网上搜搜,以前有一个WINIO可以模拟,现在好像没有了,不过应该还有其他的插件的,可以到网上搜一下。
——网页链接
展开全部
其实很多情况下不是SendKeys本身的事,而是应用程序的限制,随便举个例子吧,YY的账号和密码输入框,你试试,你获得它句柄也没用!得到输入框的句柄后,SendKeys没用,用剪贴板复制粘贴也没用,KeyPress也没用...对付这些有点限制的应用软件,用Windows API也是不靠谱的,最好是用到某些高手写的驱动级的键鼠模拟插件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
并不是因为sendkeys不稳定,而是因为它是完全模拟键盘的动作的,而在某一时刻,键盘输入的内容只能被拥有输入焦点的前台控件所接受,因此这很大程度决定于当sendkeys运行时焦点处在什么位置,比如第一次运行时焦点在窗体1的文本框中,第二次运行焦点却在窗体2的一个按钮上,那么两次运行的结果的就会大相径庭,如果拥有焦点的控件本身并不接受键盘输入(比如Label),那么sendkeys发出的键值就会被吞掉,看起来就像完全没起到作用一样。
因此,你必须在运行sendkeys之前确保你要操作的对象拥有输入焦点。
当然,最彻底的解决办法是抛弃模拟键盘输入的方式,通过API函数(FindWindow、GetWindow等)查出要输入字符的控件(如文本框)的句柄,然后直接向这个句柄写入字符(用SendMessage)即可。这种方法,操作对象可以不在前台,甚至隐藏亦可,而且不会对鼠标、键盘的正常操作造成干扰(运行期间鼠标键盘可以做其他工作)。很多游戏外挂、网站登录器、网页采集器等软件就是这样做的。
因此,你必须在运行sendkeys之前确保你要操作的对象拥有输入焦点。
当然,最彻底的解决办法是抛弃模拟键盘输入的方式,通过API函数(FindWindow、GetWindow等)查出要输入字符的控件(如文本框)的句柄,然后直接向这个句柄写入字符(用SendMessage)即可。这种方法,操作对象可以不在前台,甚至隐藏亦可,而且不会对鼠标、键盘的正常操作造成干扰(运行期间鼠标键盘可以做其他工作)。很多游戏外挂、网站登录器、网页采集器等软件就是这样做的。
追问
我写的一个程序sendkeys之前可以用 现在突然不能用了 我测试的时候确定是有焦点的 SendMessage 咋用呢?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询